{"thread":{"id":"65899","subject":"[PATCH RFC v3 1/2] t/helper: prepare \"test-example-tap.c\" for introduction of \"lib/\"","startedAt":"2026-07-01T06:59:41Z","lastAt":"2026-08-17T20:58:30Z","messageCount":18,"participants":["Patrick Steinhardt","SZEDER Gábor","Johannes Schindelin","brian m. carlson","Junio C Hamano","Taylor Blau","Michael Montalbo"],"isPatch":true,"patchVersion":3,"patchTotal":2},"messages":[{"id":"546828","messageId":"20260701-pks-libgit-in-subdir-v3-0-5e4860056094@pks.im","threadId":"65899","inReplyTo":"20260416-pks-libgit-in-subdir-v1-0-03afc731df55@pks.im","subject":"[PATCH RFC v3 0/2] Move libgit.a sources into separate \"lib/\" directory","fromName":"Patrick Steinhardt","fromEmail":"ps@pks.im","sentAt":"2026-07-01T06:59:25Z","receivedAt":"2026-07-01T06:59:40Z","isPatch":true,"body":"Hi,\n\nthis small patch series follows up on a discussion we had two years ago\nduring the Git Contributor's Summit in Berlin.\n\nI'm fully aware that this will likely result in some discussion, which\nis why I have labelled this as RFC. I'd be fine with a result of \"let's\nnot do it\" if we cannot agree on this step, but I think that the current\nlayout hurts discoverability quite a bit. Not only for newcomers, but\nI'm also struggling with it quite frequently.\n\nI also intentionally decided to send this close to the upcoming release\nso that the series can be merged early in the next release cycle if we\nwere to agree on it.\n\nI've tested this patch series with both GitLab [1] and GitHub [2].\n\nChanges in v3:\n  - Explicitly point out the downsides of doing this mass-rename. Please\n    let me know in case any arguments are missing there.\n  - Apply Dscho's fixup patch.\n  - Link to v2: https://patch.msgid.link/20260622-pks-libgit-in-subdir-v2-0-cb946c51ee7b@pks.im\n\nChanges in v2:\n  - Feedback on v1 was generally positive, and we're close to the next\n    release again. So I've decided to rebase the patch series and send\n    v2 out before the quiet pre-release phase kicks off. The series is\n    thus built on top of 8d96f09e92 (Merge branch\n    'js/objects-larger-than-4gb-on-windows', 2026-06-19) with\n    ps/odb-source-packed at 1bba3c035d (odb/source-packed: drop pointer\n    to \"files\" parent source, 2026-06-17) merged into it.\n  - Fix a couple of instances I missed to update in Meson.\n  - Link to v1: https://patch.msgid.link/20260416-pks-libgit-in-subdir-v1-0-03afc731df55@pks.im\n\nThanks!\n\nPatrick\n\n[1]: https://gitlab.com/gitlab-org/git/-/merge_requests/544\n[2]: https://github.com/git/git/pull/2271\n\n---\nPatrick Steinhardt (2):\n      t/helper: prepare \"test-example-tap.c\" for introduction of \"lib/\"\n      Move libgit.a sources into separate \"lib/\" directory\n\n .github/workflows/main.yml                         |   9 +-\n .gitmodules                                        |   2 +-\n Documentation/Makefile                             |   4 +-\n Makefile                                           | 764 ++++++++++-----------\n config.mak.uname                                   |  52 +-\n contrib/buildsystems/CMakeLists.txt                |  95 +--\n git.rc.in                                          |   2 +-\n abspath.c => lib/abspath.c                         |   0\n abspath.h => lib/abspath.h                         |   0\n add-interactive.c => lib/add-interactive.c         |   0\n add-interactive.h => lib/add-interactive.h         |   0\n add-patch.c => lib/add-patch.c                     |   0\n add-patch.h => lib/add-patch.h                     |   0\n advice.c => lib/advice.c                           |   0\n advice.h => lib/advice.h                           |   0\n alias.c => lib/alias.c                             |   0\n alias.h => lib/alias.h                             |   0\n alloc.c => lib/alloc.c                             |   0\n alloc.h => lib/alloc.h                             |   0\n apply.c => lib/apply.c                             |   0\n apply.h => lib/apply.h                             |   0\n archive-tar.c => lib/archive-tar.c                 |   0\n archive-zip.c => lib/archive-zip.c                 |   0\n archive.c => lib/archive.c                         |   0\n archive.h => lib/archive.h                         |   0\n attr.c => lib/attr.c                               |   0\n attr.h => lib/attr.h                               |   0\n banned.h => lib/banned.h                           |   0\n base85.c => lib/base85.c                           |   0\n base85.h => lib/base85.h                           |   0\n bisect.c => lib/bisect.c                           |   0\n bisect.h => lib/bisect.h                           |   0\n blame.c => lib/blame.c                             |   0\n blame.h => lib/blame.h                             |   0\n blob.c => lib/blob.c                               |   0\n blob.h => lib/blob.h                               |   0\n {block-sha1 => lib/block-sha1}/sha1.c              |   0\n {block-sha1 => lib/block-sha1}/sha1.h              |   0\n bloom.c => lib/bloom.c                             |   0\n bloom.h => lib/bloom.h                             |   0\n branch.c => lib/branch.c                           |   0\n branch.h => lib/branch.h                           |   0\n builtin.h => lib/builtin.h                         |   0\n bundle-uri.c => lib/bundle-uri.c                   |   0\n bundle-uri.h => lib/bundle-uri.h                   |   0\n bundle.c => lib/bundle.c                           |   0\n bundle.h => lib/bundle.h                           |   0\n cache-tree.c => lib/cache-tree.c                   |   0\n cache-tree.h => lib/cache-tree.h                   |   0\n cbtree.c => lib/cbtree.c                           |   0\n cbtree.h => lib/cbtree.h                           |   0\n chdir-notify.c => lib/chdir-notify.c               |   0\n chdir-notify.h => lib/chdir-notify.h               |   0\n checkout.c => lib/checkout.c                       |   0\n checkout.h => lib/checkout.h                       |   0\n chunk-format.c => lib/chunk-format.c               |   0\n chunk-format.h => lib/chunk-format.h               |   0\n color.c => lib/color.c                             |   0\n color.h => lib/color.h                             |   0\n column.c => lib/column.c                           |   0\n column.h => lib/column.h                           |   0\n combine-diff.c => lib/combine-diff.c               |   0\n commit-graph.c => lib/commit-graph.c               |   0\n commit-graph.h => lib/commit-graph.h               |   0\n commit-reach.c => lib/commit-reach.c               |   0\n commit-reach.h => lib/commit-reach.h               |   0\n commit-slab-decl.h => lib/commit-slab-decl.h       |   0\n commit-slab-impl.h => lib/commit-slab-impl.h       |   0\n commit-slab.h => lib/commit-slab.h                 |   0\n commit.c => lib/commit.c                           |   0\n commit.h => lib/commit.h                           |   0\n common-exit.c => lib/common-exit.c                 |   0\n common-init.c => lib/common-init.c                 |   0\n common-init.h => lib/common-init.h                 |   0\n {compat => lib/compat}/.gitattributes              |   0\n {compat => lib/compat}/access.c                    |   0\n {compat => lib/compat}/apple-common-crypto.h       |   0\n {compat => lib/compat}/basename.c                  |   0\n {compat => lib/compat}/bswap.h                     |   0\n {compat => lib/compat}/compiler.h                  |   0\n {compat => lib/compat}/darwin/procinfo.c           |   0\n {compat => lib/compat}/disk.h                      |   0\n {compat => lib/compat}/fileno.c                    |   0\n {compat => lib/compat}/fopen.c                     |   0\n {compat => lib/compat}/fsmonitor/fsm-darwin-gcc.h  |   0\n .../compat}/fsmonitor/fsm-health-darwin.c          |   0\n .../compat}/fsmonitor/fsm-health-linux.c           |   0\n .../compat}/fsmonitor/fsm-health-win32.c           |   0\n {compat => lib/compat}/fsmonitor/fsm-health.h      |   0\n {compat => lib/compat}/fsmonitor/fsm-ipc-unix.c    |   0\n {compat => lib/compat}/fsmonitor/fsm-ipc-win32.c   |   0\n .../compat}/fsmonitor/fsm-listen-darwin.c          |   0\n .../compat}/fsmonitor/fsm-listen-linux.c           |   0\n .../compat}/fsmonitor/fsm-listen-win32.c           |   0\n {compat => lib/compat}/fsmonitor/fsm-listen.h      |   0\n .../compat}/fsmonitor/fsm-path-utils-darwin.c      |   0\n .../compat}/fsmonitor/fsm-path-utils-linux.c       |   0\n .../compat}/fsmonitor/fsm-path-utils-win32.c       |   0\n .../compat}/fsmonitor/fsm-settings-unix.c          |   0\n .../compat}/fsmonitor/fsm-settings-win32.c         |   0\n {compat => lib/compat}/hstrerror.c                 |   0\n {compat => lib/compat}/inet_ntop.c                 |   0\n {compat => lib/compat}/inet_pton.c                 |   0\n {compat => lib/compat}/linux/procinfo.c            |   0\n {compat => lib/compat}/memmem.c                    |   0\n {compat => lib/compat}/mingw-posix.h               |   0\n {compat => lib/compat}/mingw.c                     |   0\n {compat => lib/compat}/mingw.h                     |   0\n {compat => lib/compat}/mkdir.c                     |   0\n {compat => lib/compat}/mmap.c                      |   0\n {compat => lib/compat}/msvc-posix.h                |   0\n {compat => lib/compat}/msvc.c                      |   0\n {compat => lib/compat}/msvc.h                      |   0\n {compat => lib/compat}/nonblock.c                  |   0\n {compat => lib/compat}/nonblock.h                  |   0\n {compat => lib/compat}/obstack.c                   |   0\n {compat => lib/compat}/obstack.h                   |   0\n {compat => lib/compat}/open.c                      |   0\n {compat => lib/compat}/poll/poll.c                 |   0\n {compat => lib/compat}/poll/poll.h                 |   0\n {compat => lib/compat}/posix.h                     |   0\n {compat => lib/compat}/pread.c                     |   0\n {compat => lib/compat}/precompose_utf8.c           |   0\n {compat => lib/compat}/precompose_utf8.h           |   0\n {compat => lib/compat}/qsort_s.c                   |   0\n {compat => lib/compat}/regcomp_enhanced.c          |   0\n {compat => lib/compat}/regex/regcomp.c             |   0\n {compat => lib/compat}/regex/regex.c               |   0\n {compat => lib/compat}/regex/regex.h               |   0\n {compat => lib/compat}/regex/regex_internal.c      |   0\n {compat => lib/compat}/regex/regex_internal.h      |   0\n {compat => lib/compat}/regex/regexec.c             |   0\n {compat => lib/compat}/setenv.c                    |   0\n {compat => lib/compat}/sha1-chunked.c              |   0\n {compat => lib/compat}/sha1-chunked.h              |   0\n {compat => lib/compat}/simple-ipc/ipc-shared.c     |   0\n .../compat}/simple-ipc/ipc-unix-socket.c           |   0\n {compat => lib/compat}/simple-ipc/ipc-win32.c      |   0\n {compat => lib/compat}/snprintf.c                  |   0\n {compat => lib/compat}/stat.c                      |   0\n {compat => lib/compat}/strcasestr.c                |   0\n {compat => lib/compat}/strdup.c                    |   0\n {compat => lib/compat}/strlcpy.c                   |   0\n {compat => lib/compat}/strtoimax.c                 |   0\n {compat => lib/compat}/strtoumax.c                 |   0\n {compat => lib/compat}/stub/procinfo.c             |   0\n {compat => lib/compat}/terminal.c                  |   0\n {compat => lib/compat}/terminal.h                  |   0\n {compat => lib/compat}/unsetenv.c                  |   0\n {compat => lib/compat}/vcbuild/.gitignore          |   0\n {compat => lib/compat}/vcbuild/README              |  10 +-\n {compat => lib/compat}/vcbuild/find_vs_env.bat     |   2 +-\n {compat => lib/compat}/vcbuild/include/sys/param.h |   0\n {compat => lib/compat}/vcbuild/include/sys/time.h  |   0\n {compat => lib/compat}/vcbuild/include/sys/utime.h |   0\n {compat => lib/compat}/vcbuild/include/unistd.h    |   0\n {compat => lib/compat}/vcbuild/include/utime.h     |   0\n {compat => lib/compat}/vcbuild/scripts/clink.pl    |   0\n {compat => lib/compat}/vcbuild/scripts/lib.pl      |   0\n {compat => lib/compat}/vcbuild/vcpkg_copy_dlls.bat |   0\n {compat => lib/compat}/vcbuild/vcpkg_install.bat   |   4 +-\n {compat => lib/compat}/win32.h                     |   0\n {compat => lib/compat}/win32/alloca.h              |   0\n {compat => lib/compat}/win32/dirent.c              |   0\n {compat => lib/compat}/win32/dirent.h              |   0\n {compat => lib/compat}/win32/exit-process.h        |   0\n {compat => lib/compat}/win32/flush.c               |   0\n {compat => lib/compat}/win32/git.manifest          |   0\n {compat => lib/compat}/win32/headless.c            |   0\n {compat => lib/compat}/win32/lazyload.h            |   0\n {compat => lib/compat}/win32/path-utils.c          |   0\n {compat => lib/compat}/win32/path-utils.h          |   0\n {compat => lib/compat}/win32/pthread.c             |   0\n {compat => lib/compat}/win32/pthread.h             |   0\n {compat => lib/compat}/win32/syslog.c              |   0\n {compat => lib/compat}/win32/syslog.h              |   0\n .../compat}/win32/trace2_win32_process_info.c      |   0\n {compat => lib/compat}/win32mmap.c                 |   0\n {compat => lib/compat}/winansi.c                   |   0\n {compat => lib/compat}/zlib-compat.h               |   0\n .../compiler-tricks}/not-constant.c                |   0\n config.c => lib/config.c                           |   0\n config.h => lib/config.h                           |   0\n connect.c => lib/connect.c                         |   0\n connect.h => lib/connect.h                         |   0\n connected.c => lib/connected.c                     |   0\n connected.h => lib/connected.h                     |   0\n convert.c => lib/convert.c                         |   0\n convert.h => lib/convert.h                         |   0\n copy.c => lib/copy.c                               |   0\n copy.h => lib/copy.h                               |   0\n credential.c => lib/credential.c                   |   0\n credential.h => lib/credential.h                   |   0\n csum-file.c => lib/csum-file.c                     |   0\n csum-file.h => lib/csum-file.h                     |   0\n ctype.c => lib/ctype.c                             |   0\n date.c => lib/date.c                               |   0\n date.h => lib/date.h                               |   0\n decorate.c => lib/decorate.c                       |   0\n decorate.h => lib/decorate.h                       |   0\n delta-islands.c => lib/delta-islands.c             |   0\n delta-islands.h => lib/delta-islands.h             |   0\n delta.h => lib/delta.h                             |   0\n diagnose.c => lib/diagnose.c                       |   0\n diagnose.h => lib/diagnose.h                       |   0\n diff-delta.c => lib/diff-delta.c                   |   0\n diff-lib.c => lib/diff-lib.c                       |   0\n diff-merges.c => lib/diff-merges.c                 |   0\n diff-merges.h => lib/diff-merges.h                 |   0\n diff-no-index.c => lib/diff-no-index.c             |   0\n diff.c => lib/diff.c                               |   0\n diff.h => lib/diff.h                               |   0\n diffcore-break.c => lib/diffcore-break.c           |   0\n diffcore-delta.c => lib/diffcore-delta.c           |   0\n diffcore-order.c => lib/diffcore-order.c           |   0\n diffcore-pickaxe.c => lib/diffcore-pickaxe.c       |   0\n diffcore-rename.c => lib/diffcore-rename.c         |   0\n diffcore-rotate.c => lib/diffcore-rotate.c         |   0\n diffcore.h => lib/diffcore.h                       |   0\n dir-iterator.c => lib/dir-iterator.c               |   0\n dir-iterator.h => lib/dir-iterator.h               |   0\n dir.c => lib/dir.c                                 |   0\n dir.h => lib/dir.h                                 |   0\n editor.c => lib/editor.c                           |   0\n editor.h => lib/editor.h                           |   0\n entry.c => lib/entry.c                             |   0\n entry.h => lib/entry.h                             |   0\n environment.c => lib/environment.c                 |   0\n environment.h => lib/environment.h                 |   0\n {ewah => lib/ewah}/bitmap.c                        |   0\n {ewah => lib/ewah}/ewah_bitmap.c                   |   0\n {ewah => lib/ewah}/ewah_io.c                       |   0\n {ewah => lib/ewah}/ewah_rlw.c                      |   0\n {ewah => lib/ewah}/ewok.h                          |   0\n {ewah => lib/ewah}/ewok_rlw.h                      |   0\n exec-cmd.c => lib/exec-cmd.c                       |   0\n exec-cmd.h => lib/exec-cmd.h                       |   0\n fetch-negotiator.c => lib/fetch-negotiator.c       |   0\n fetch-negotiator.h => lib/fetch-negotiator.h       |   0\n fetch-pack.c => lib/fetch-pack.c                   |   0\n fetch-pack.h => lib/fetch-pack.h                   |   0\n fmt-merge-msg.c => lib/fmt-merge-msg.c             |   0\n fmt-merge-msg.h => lib/fmt-merge-msg.h             |   0\n for-each-ref.h => lib/for-each-ref.h               |   0\n fsck.c => lib/fsck.c                               |   0\n fsck.h => lib/fsck.h                               |   0\n fsmonitor--daemon.h => lib/fsmonitor--daemon.h     |   0\n fsmonitor-ipc.c => lib/fsmonitor-ipc.c             |   0\n fsmonitor-ipc.h => lib/fsmonitor-ipc.h             |   0\n fsmonitor-ll.h => lib/fsmonitor-ll.h               |   0\n .../fsmonitor-path-utils.h                         |   0\n fsmonitor-settings.c => lib/fsmonitor-settings.c   |   0\n fsmonitor-settings.h => lib/fsmonitor-settings.h   |   0\n fsmonitor.c => lib/fsmonitor.c                     |   0\n fsmonitor.h => lib/fsmonitor.h                     |   0\n gettext.c => lib/gettext.c                         |   0\n gettext.h => lib/gettext.h                         |   0\n git-compat-util.h => lib/git-compat-util.h         |   0\n git-curl-compat.h => lib/git-curl-compat.h         |   0\n git-zlib.c => lib/git-zlib.c                       |   0\n git-zlib.h => lib/git-zlib.h                       |   0\n gpg-interface.c => lib/gpg-interface.c             |   0\n gpg-interface.h => lib/gpg-interface.h             |   0\n graph.c => lib/graph.c                             |   0\n graph.h => lib/graph.h                             |   0\n grep.c => lib/grep.c                               |   0\n grep.h => lib/grep.h                               |   0\n hash-lookup.c => lib/hash-lookup.c                 |   0\n hash-lookup.h => lib/hash-lookup.h                 |   0\n hash.c => lib/hash.c                               |   0\n hash.h => lib/hash.h                               |   0\n hashmap.c => lib/hashmap.c                         |   0\n hashmap.h => lib/hashmap.h                         |   0\n help.c => lib/help.c                               |   0\n help.h => lib/help.h                               |   0\n hex-ll.c => lib/hex-ll.c                           |   0\n hex-ll.h => lib/hex-ll.h                           |   0\n hex.c => lib/hex.c                                 |   0\n hex.h => lib/hex.h                                 |   0\n hook.c => lib/hook.c                               |   0\n hook.h => lib/hook.h                               |   0\n http-walker.c => lib/http-walker.c                 |   0\n http.c => lib/http.c                               |   0\n http.h => lib/http.h                               |   0\n ident.c => lib/ident.c                             |   0\n ident.h => lib/ident.h                             |   0\n iterator.h => lib/iterator.h                       |   0\n json-writer.c => lib/json-writer.c                 |   0\n json-writer.h => lib/json-writer.h                 |   0\n khash.h => lib/khash.h                             |   0\n kwset.c => lib/kwset.c                             |   0\n kwset.h => lib/kwset.h                             |   0\n levenshtein.c => lib/levenshtein.c                 |   0\n levenshtein.h => lib/levenshtein.h                 |   0\n line-log.c => lib/line-log.c                       |   0\n line-log.h => lib/line-log.h                       |   0\n line-range.c => lib/line-range.c                   |   0\n line-range.h => lib/line-range.h                   |   0\n linear-assignment.c => lib/linear-assignment.c     |   0\n linear-assignment.h => lib/linear-assignment.h     |   0\n .../list-objects-filter-options.c                  |   0\n .../list-objects-filter-options.h                  |   0\n list-objects-filter.c => lib/list-objects-filter.c |   0\n list-objects-filter.h => lib/list-objects-filter.h |   0\n list-objects.c => lib/list-objects.c               |   0\n list-objects.h => lib/list-objects.h               |   0\n list.h => lib/list.h                               |   0\n lockfile.c => lib/lockfile.c                       |   0\n lockfile.h => lib/lockfile.h                       |   0\n log-tree.c => lib/log-tree.c                       |   0\n log-tree.h => lib/log-tree.h                       |   0\n loose.c => lib/loose.c                             |   0\n loose.h => lib/loose.h                             |   0\n ls-refs.c => lib/ls-refs.c                         |   0\n ls-refs.h => lib/ls-refs.h                         |   0\n mailinfo.c => lib/mailinfo.c                       |   0\n mailinfo.h => lib/mailinfo.h                       |   0\n mailmap.c => lib/mailmap.c                         |   0\n mailmap.h => lib/mailmap.h                         |   0\n match-trees.c => lib/match-trees.c                 |   0\n match-trees.h => lib/match-trees.h                 |   0\n mem-pool.c => lib/mem-pool.c                       |   0\n mem-pool.h => lib/mem-pool.h                       |   0\n merge-blobs.c => lib/merge-blobs.c                 |   0\n merge-blobs.h => lib/merge-blobs.h                 |   0\n merge-ll.c => lib/merge-ll.c                       |   0\n merge-ll.h => lib/merge-ll.h                       |   0\n merge-ort-wrappers.c => lib/merge-ort-wrappers.c   |   0\n merge-ort-wrappers.h => lib/merge-ort-wrappers.h   |   0\n merge-ort.c => lib/merge-ort.c                     |   0\n merge-ort.h => lib/merge-ort.h                     |   0\n merge.c => lib/merge.c                             |   0\n merge.h => lib/merge.h                             |   0\n mergesort.h => lib/mergesort.h                     |   0\n midx-write.c => lib/midx-write.c                   |   0\n midx.c => lib/midx.c                               |   0\n midx.h => lib/midx.h                               |   0\n name-hash.c => lib/name-hash.c                     |   0\n name-hash.h => lib/name-hash.h                     |   0\n {negotiator => lib/negotiator}/default.c           |   0\n {negotiator => lib/negotiator}/default.h           |   0\n {negotiator => lib/negotiator}/noop.c              |   0\n {negotiator => lib/negotiator}/noop.h              |   0\n {negotiator => lib/negotiator}/skipping.c          |   0\n {negotiator => lib/negotiator}/skipping.h          |   0\n notes-cache.c => lib/notes-cache.c                 |   0\n notes-cache.h => lib/notes-cache.h                 |   0\n notes-merge.c => lib/notes-merge.c                 |   0\n notes-merge.h => lib/notes-merge.h                 |   0\n notes-utils.c => lib/notes-utils.c                 |   0\n notes-utils.h => lib/notes-utils.h                 |   0\n notes.c => lib/notes.c                             |   0\n notes.h => lib/notes.h                             |   0\n object-file-convert.c => lib/object-file-convert.c |   0\n object-file-convert.h => lib/object-file-convert.h |   0\n object-file.c => lib/object-file.c                 |   0\n object-file.h => lib/object-file.h                 |   0\n object-name.c => lib/object-name.c                 |   0\n object-name.h => lib/object-name.h                 |   0\n object.c => lib/object.c                           |   0\n object.h => lib/object.h                           |   0\n odb.c => lib/odb.c                                 |   0\n odb.h => lib/odb.h                                 |   0\n {odb => lib/odb}/source-files.c                    |   0\n {odb => lib/odb}/source-files.h                    |   0\n {odb => lib/odb}/source-inmemory.c                 |   0\n {odb => lib/odb}/source-inmemory.h                 |   0\n {odb => lib/odb}/source-loose.c                    |   0\n {odb => lib/odb}/source-loose.h                    |   0\n {odb => lib/odb}/source-packed.c                   |   0\n {odb => lib/odb}/source-packed.h                   |   0\n {odb => lib/odb}/source.c                          |   0\n {odb => lib/odb}/source.h                          |   0\n {odb => lib/odb}/streaming.c                       |   0\n {odb => lib/odb}/streaming.h                       |   0\n {odb => lib/odb}/transaction.c                     |   0\n {odb => lib/odb}/transaction.h                     |   0\n oid-array.c => lib/oid-array.c                     |   0\n oid-array.h => lib/oid-array.h                     |   0\n oidmap.c => lib/oidmap.c                           |   0\n oidmap.h => lib/oidmap.h                           |   0\n oidset.c => lib/oidset.c                           |   0\n oidset.h => lib/oidset.h                           |   0\n oidtree.c => lib/oidtree.c                         |   0\n oidtree.h => lib/oidtree.h                         |   0\n pack-bitmap-write.c => lib/pack-bitmap-write.c     |   0\n pack-bitmap.c => lib/pack-bitmap.c                 |   0\n pack-bitmap.h => lib/pack-bitmap.h                 |   0\n pack-check.c => lib/pack-check.c                   |   0\n pack-mtimes.c => lib/pack-mtimes.c                 |   0\n pack-mtimes.h => lib/pack-mtimes.h                 |   0\n pack-objects.c => lib/pack-objects.c               |   0\n pack-objects.h => lib/pack-objects.h               |   0\n pack-refs.c => lib/pack-refs.c                     |   0\n pack-refs.h => lib/pack-refs.h                     |   0\n pack-revindex.c => lib/pack-revindex.c             |   0\n pack-revindex.h => lib/pack-revindex.h             |   0\n pack-write.c => lib/pack-write.c                   |   0\n pack.h => lib/pack.h                               |   0\n packfile-list.c => lib/packfile-list.c             |   0\n packfile-list.h => lib/packfile-list.h             |   0\n packfile.c => lib/packfile.c                       |   0\n packfile.h => lib/packfile.h                       |   0\n pager.c => lib/pager.c                             |   0\n pager.h => lib/pager.h                             |   0\n parallel-checkout.c => lib/parallel-checkout.c     |   0\n parallel-checkout.h => lib/parallel-checkout.h     |   0\n parse-options-cb.c => lib/parse-options-cb.c       |   0\n parse-options.c => lib/parse-options.c             |   0\n parse-options.h => lib/parse-options.h             |   0\n parse.c => lib/parse.c                             |   0\n parse.h => lib/parse.h                             |   0\n patch-delta.c => lib/patch-delta.c                 |   0\n patch-ids.c => lib/patch-ids.c                     |   0\n patch-ids.h => lib/patch-ids.h                     |   0\n path-walk.c => lib/path-walk.c                     |   0\n path-walk.h => lib/path-walk.h                     |   0\n path.c => lib/path.c                               |   0\n path.h => lib/path.h                               |   0\n pathspec.c => lib/pathspec.c                       |   0\n pathspec.h => lib/pathspec.h                       |   0\n pkt-line.c => lib/pkt-line.c                       |   0\n pkt-line.h => lib/pkt-line.h                       |   0\n preload-index.c => lib/preload-index.c             |   0\n preload-index.h => lib/preload-index.h             |   0\n pretty.c => lib/pretty.c                           |   0\n pretty.h => lib/pretty.h                           |   0\n prio-queue.c => lib/prio-queue.c                   |   0\n prio-queue.h => lib/prio-queue.h                   |   0\n progress.c => lib/progress.c                       |   0\n progress.h => lib/progress.h                       |   0\n promisor-remote.c => lib/promisor-remote.c         |   0\n promisor-remote.h => lib/promisor-remote.h         |   0\n prompt.c => lib/prompt.c                           |   0\n prompt.h => lib/prompt.h                           |   0\n protocol-caps.c => lib/protocol-caps.c             |   0\n protocol-caps.h => lib/protocol-caps.h             |   0\n protocol.c => lib/protocol.c                       |   0\n protocol.h => lib/protocol.h                       |   0\n prune-packed.c => lib/prune-packed.c               |   0\n prune-packed.h => lib/prune-packed.h               |   0\n pseudo-merge.c => lib/pseudo-merge.c               |   0\n pseudo-merge.h => lib/pseudo-merge.h               |   0\n quote.c => lib/quote.c                             |   0\n quote.h => lib/quote.h                             |   0\n range-diff.c => lib/range-diff.c                   |   0\n range-diff.h => lib/range-diff.h                   |   0\n reachable.c => lib/reachable.c                     |   0\n reachable.h => lib/reachable.h                     |   0\n read-cache-ll.h => lib/read-cache-ll.h             |   0\n read-cache.c => lib/read-cache.c                   |   0\n read-cache.h => lib/read-cache.h                   |   0\n rebase-interactive.c => lib/rebase-interactive.c   |   0\n rebase-interactive.h => lib/rebase-interactive.h   |   0\n rebase.c => lib/rebase.c                           |   0\n rebase.h => lib/rebase.h                           |   0\n ref-filter.c => lib/ref-filter.c                   |   0\n ref-filter.h => lib/ref-filter.h                   |   0\n reflog-walk.c => lib/reflog-walk.c                 |   0\n reflog-walk.h => lib/reflog-walk.h                 |   0\n reflog.c => lib/reflog.c                           |   0\n reflog.h => lib/reflog.h                           |   0\n refs.c => lib/refs.c                               |   0\n refs.h => lib/refs.h                               |   0\n {refs => lib/refs}/debug.c                         |   0\n {refs => lib/refs}/files-backend.c                 |   0\n {refs => lib/refs}/iterator.c                      |   0\n {refs => lib/refs}/packed-backend.c                |   0\n {refs => lib/refs}/packed-backend.h                |   0\n {refs => lib/refs}/ref-cache.c                     |   0\n {refs => lib/refs}/ref-cache.h                     |   0\n {refs => lib/refs}/refs-internal.h                 |   0\n {refs => lib/refs}/reftable-backend.c              |   0\n refspec.c => lib/refspec.c                         |   0\n refspec.h => lib/refspec.h                         |   0\n {reftable => lib/reftable}/LICENSE                 |   0\n {reftable => lib/reftable}/basics.c                |   0\n {reftable => lib/reftable}/basics.h                |   0\n {reftable => lib/reftable}/block.c                 |   0\n {reftable => lib/reftable}/block.h                 |   0\n {reftable => lib/reftable}/blocksource.c           |   0\n {reftable => lib/reftable}/blocksource.h           |   0\n {reftable => lib/reftable}/constants.h             |   0\n {reftable => lib/reftable}/error.c                 |   0\n {reftable => lib/reftable}/fsck.c                  |   0\n {reftable => lib/reftable}/iter.c                  |   0\n {reftable => lib/reftable}/iter.h                  |   0\n {reftable => lib/reftable}/merged.c                |   0\n {reftable => lib/reftable}/merged.h                |   0\n {reftable => lib/reftable}/pq.c                    |   0\n {reftable => lib/reftable}/pq.h                    |   0\n {reftable => lib/reftable}/record.c                |   0\n {reftable => lib/reftable}/record.h                |   0\n {reftable => lib/reftable}/reftable-basics.h       |   0\n {reftable => lib/reftable}/reftable-block.h        |   0\n {reftable => lib/reftable}/reftable-blocksource.h  |   0\n {reftable => lib/reftable}/reftable-constants.h    |   0\n {reftable => lib/reftable}/reftable-error.h        |   0\n {reftable => lib/reftable}/reftable-fsck.h         |   0\n {reftable => lib/reftable}/reftable-iterator.h     |   0\n {reftable => lib/reftable}/reftable-merged.h       |   0\n {reftable => lib/reftable}/reftable-record.h       |   0\n {reftable => lib/reftable}/reftable-stack.h        |   0\n {reftable => lib/reftable}/reftable-system.h       |   0\n {reftable => lib/reftable}/reftable-table.h        |   0\n {reftable => lib/reftable}/reftable-writer.h       |   0\n {reftable => lib/reftable}/stack.c                 |   0\n {reftable => lib/reftable}/stack.h                 |   0\n {reftable => lib/reftable}/system.c                |   0\n {reftable => lib/reftable}/system.h                |   0\n {reftable => lib/reftable}/table.c                 |   0\n {reftable => lib/reftable}/table.h                 |   0\n {reftable => lib/reftable}/tree.c                  |   0\n {reftable => lib/reftable}/tree.h                  |   0\n {reftable => lib/reftable}/writer.c                |   0\n {reftable => lib/reftable}/writer.h                |   0\n remote.c => lib/remote.c                           |   0\n remote.h => lib/remote.h                           |   0\n repack-cruft.c => lib/repack-cruft.c               |   0\n repack-filtered.c => lib/repack-filtered.c         |   0\n repack-geometry.c => lib/repack-geometry.c         |   0\n repack-midx.c => lib/repack-midx.c                 |   0\n repack-promisor.c => lib/repack-promisor.c         |   0\n repack.c => lib/repack.c                           |   0\n repack.h => lib/repack.h                           |   0\n replace-object.c => lib/replace-object.c           |   0\n replace-object.h => lib/replace-object.h           |   0\n replay.c => lib/replay.c                           |   0\n replay.h => lib/replay.h                           |   0\n repo-settings.c => lib/repo-settings.c             |   0\n repo-settings.h => lib/repo-settings.h             |   0\n repository.c => lib/repository.c                   |   0\n repository.h => lib/repository.h                   |   0\n rerere.c => lib/rerere.c                           |   0\n rerere.h => lib/rerere.h                           |   0\n reset.c => lib/reset.c                             |   0\n reset.h => lib/reset.h                             |   0\n resolve-undo.c => lib/resolve-undo.c               |   0\n resolve-undo.h => lib/resolve-undo.h               |   0\n revision.c => lib/revision.c                       |   0\n revision.h => lib/revision.h                       |   0\n run-command.c => lib/run-command.c                 |   0\n run-command.h => lib/run-command.h                 |   0\n sane-ctype.h => lib/sane-ctype.h                   |   0\n send-pack.c => lib/send-pack.c                     |   0\n send-pack.h => lib/send-pack.h                     |   0\n sequencer.c => lib/sequencer.c                     |   0\n sequencer.h => lib/sequencer.h                     |   0\n serve.c => lib/serve.c                             |   0\n serve.h => lib/serve.h                             |   0\n server-info.c => lib/server-info.c                 |   0\n server-info.h => lib/server-info.h                 |   0\n setup.c => lib/setup.c                             |   0\n setup.h => lib/setup.h                             |   0\n {sha1 => lib/sha1}/openssl.h                       |   0\n .../sha1collisiondetection                         |   0\n {sha1dc => lib/sha1dc}/.gitattributes              |   0\n {sha1dc => lib/sha1dc}/LICENSE.txt                 |   0\n {sha1dc => lib/sha1dc}/sha1.c                      |   0\n {sha1dc => lib/sha1dc}/sha1.h                      |   0\n {sha1dc => lib/sha1dc}/ubc_check.c                 |   0\n {sha1dc => lib/sha1dc}/ubc_check.h                 |   0\n sha1dc_git.c => lib/sha1dc_git.c                   |   0\n sha1dc_git.h => lib/sha1dc_git.h                   |   0\n {sha256 => lib/sha256}/block/sha256.c              |   0\n {sha256 => lib/sha256}/block/sha256.h              |   0\n {sha256 => lib/sha256}/gcrypt.h                    |   0\n {sha256 => lib/sha256}/nettle.h                    |   0\n {sha256 => lib/sha256}/openssl.h                   |   0\n shallow.c => lib/shallow.c                         |   0\n shallow.h => lib/shallow.h                         |   0\n shortlog.h => lib/shortlog.h                       |   0\n sideband.c => lib/sideband.c                       |   0\n sideband.h => lib/sideband.h                       |   0\n sigchain.c => lib/sigchain.c                       |   0\n sigchain.h => lib/sigchain.h                       |   0\n simple-ipc.h => lib/simple-ipc.h                   |   0\n sparse-index.c => lib/sparse-index.c               |   0\n sparse-index.h => lib/sparse-index.h               |   0\n split-index.c => lib/split-index.c                 |   0\n split-index.h => lib/split-index.h                 |   0\n stable-qsort.c => lib/stable-qsort.c               |   0\n statinfo.c => lib/statinfo.c                       |   0\n statinfo.h => lib/statinfo.h                       |   0\n strbuf.c => lib/strbuf.c                           |   0\n strbuf.h => lib/strbuf.h                           |   0\n string-list.c => lib/string-list.c                 |   0\n string-list.h => lib/string-list.h                 |   0\n strmap.c => lib/strmap.c                           |   0\n strmap.h => lib/strmap.h                           |   0\n strvec.c => lib/strvec.c                           |   0\n strvec.h => lib/strvec.h                           |   0\n sub-process.c => lib/sub-process.c                 |   0\n sub-process.h => lib/sub-process.h                 |   0\n submodule-config.c => lib/submodule-config.c       |   0\n submodule-config.h => lib/submodule-config.h       |   0\n submodule.c => lib/submodule.c                     |   0\n submodule.h => lib/submodule.h                     |   0\n symlinks.c => lib/symlinks.c                       |   0\n symlinks.h => lib/symlinks.h                       |   0\n tag.c => lib/tag.c                                 |   0\n tag.h => lib/tag.h                                 |   0\n tar.h => lib/tar.h                                 |   0\n tempfile.c => lib/tempfile.c                       |   0\n tempfile.h => lib/tempfile.h                       |   0\n thread-utils.c => lib/thread-utils.c               |   0\n thread-utils.h => lib/thread-utils.h               |   0\n tmp-objdir.c => lib/tmp-objdir.c                   |   0\n tmp-objdir.h => lib/tmp-objdir.h                   |   0\n trace.c => lib/trace.c                             |   0\n trace.h => lib/trace.h                             |   0\n trace2.c => lib/trace2.c                           |   0\n trace2.h => lib/trace2.h                           |   0\n {trace2 => lib/trace2}/tr2_cfg.c                   |   0\n {trace2 => lib/trace2}/tr2_cfg.h                   |   0\n {trace2 => lib/trace2}/tr2_cmd_name.c              |   0\n {trace2 => lib/trace2}/tr2_cmd_name.h              |   0\n {trace2 => lib/trace2}/tr2_ctr.c                   |   0\n {trace2 => lib/trace2}/tr2_ctr.h                   |   0\n {trace2 => lib/trace2}/tr2_dst.c                   |   0\n {trace2 => lib/trace2}/tr2_dst.h                   |   0\n {trace2 => lib/trace2}/tr2_sid.c                   |   0\n {trace2 => lib/trace2}/tr2_sid.h                   |   0\n {trace2 => lib/trace2}/tr2_sysenv.c                |   0\n {trace2 => lib/trace2}/tr2_sysenv.h                |   0\n {trace2 => lib/trace2}/tr2_tbuf.c                  |   0\n {trace2 => lib/trace2}/tr2_tbuf.h                  |   0\n {trace2 => lib/trace2}/tr2_tgt.h                   |   0\n {trace2 => lib/trace2}/tr2_tgt_event.c             |   0\n {trace2 => lib/trace2}/tr2_tgt_normal.c            |   0\n {trace2 => lib/trace2}/tr2_tgt_perf.c              |   0\n {trace2 => lib/trace2}/tr2_tls.c                   |   0\n {trace2 => lib/trace2}/tr2_tls.h                   |   0\n {trace2 => lib/trace2}/tr2_tmr.c                   |   0\n {trace2 => lib/trace2}/tr2_tmr.h                   |   0\n trailer.c => lib/trailer.c                         |   0\n trailer.h => lib/trailer.h                         |   0\n transport-helper.c => lib/transport-helper.c       |   0\n transport-internal.h => lib/transport-internal.h   |   0\n transport.c => lib/transport.c                     |   0\n transport.h => lib/transport.h                     |   0\n tree-diff.c => lib/tree-diff.c                     |   0\n tree-walk.c => lib/tree-walk.c                     |   0\n tree-walk.h => lib/tree-walk.h                     |   0\n tree.c => lib/tree.c                               |   0\n tree.h => lib/tree.h                               |   0\n unicode-width.h => lib/unicode-width.h             |   0\n unix-socket.c => lib/unix-socket.c                 |   0\n unix-socket.h => lib/unix-socket.h                 |   0\n unix-stream-server.c => lib/unix-stream-server.c   |   0\n unix-stream-server.h => lib/unix-stream-server.h   |   0\n unpack-trees.c => lib/unpack-trees.c               |   0\n unpack-trees.h => lib/unpack-trees.h               |   0\n upload-pack.c => lib/upload-pack.c                 |   0\n upload-pack.h => lib/upload-pack.h                 |   0\n url.c => lib/url.c                                 |   0\n url.h => lib/url.h                                 |   0\n urlmatch.c => lib/urlmatch.c                       |   0\n urlmatch.h => lib/urlmatch.h                       |   0\n usage.c => lib/usage.c                             |   0\n userdiff.c => lib/userdiff.c                       |   0\n userdiff.h => lib/userdiff.h                       |   0\n utf8.c => lib/utf8.c                               |   0\n utf8.h => lib/utf8.h                               |   0\n varint.c => lib/varint.c                           |   0\n varint.h => lib/varint.h                           |   0\n version-def.h.in => lib/version-def.h.in           |   0\n version.c => lib/version.c                         |   0\n version.h => lib/version.h                         |   0\n versioncmp.c => lib/versioncmp.c                   |   0\n versioncmp.h => lib/versioncmp.h                   |   0\n walker.c => lib/walker.c                           |   0\n walker.h => lib/walker.h                           |   0\n wildmatch.c => lib/wildmatch.c                     |   0\n wildmatch.h => lib/wildmatch.h                     |   0\n worktree.c => lib/worktree.c                       |   0\n worktree.h => lib/worktree.h                       |   0\n wrapper.c => lib/wrapper.c                         |   0\n wrapper.h => lib/wrapper.h                         |   0\n write-or-die.c => lib/write-or-die.c               |   0\n write-or-die.h => lib/write-or-die.h               |   0\n ws.c => lib/ws.c                                   |   0\n ws.h => lib/ws.h                                   |   0\n wt-status.c => lib/wt-status.c                     |   0\n wt-status.h => lib/wt-status.h                     |   0\n xdiff-interface.c => lib/xdiff-interface.c         |   0\n xdiff-interface.h => lib/xdiff-interface.h         |   0\n {xdiff => lib/xdiff}/xdiff.h                       |   0\n {xdiff => lib/xdiff}/xdiffi.c                      |   0\n {xdiff => lib/xdiff}/xdiffi.h                      |   0\n {xdiff => lib/xdiff}/xemit.c                       |   0\n {xdiff => lib/xdiff}/xemit.h                       |   0\n {xdiff => lib/xdiff}/xhistogram.c                  |   0\n {xdiff => lib/xdiff}/xinclude.h                    |   0\n {xdiff => lib/xdiff}/xmacros.h                     |   0\n {xdiff => lib/xdiff}/xmerge.c                      |   0\n {xdiff => lib/xdiff}/xpatience.c                   |   0\n {xdiff => lib/xdiff}/xprepare.c                    |   0\n {xdiff => lib/xdiff}/xprepare.h                    |   0\n {xdiff => lib/xdiff}/xtypes.h                      |   0\n {xdiff => lib/xdiff}/xutils.c                      |   0\n {xdiff => lib/xdiff}/xutils.h                      |   0\n meson.build                                        | 700 +++++++++----------\n t/helper/test-example-tap.c                        |   2 +-\n 704 files changed, 824 insertions(+), 822 deletions(-)\n\nRange-diff versus v2:\n\n1:  67b5b03240 = 1:  d0f7d75054 t/helper: prepare \"test-example-tap.c\" for introduction of \"lib/\"\n2:  77512405b6 ! 2:  ae1aba0a5b Move libgit.a sources into separate \"lib/\" directory\n    @@ Commit message\n     \n         These are problems that we're aware of, and there have been and still\n         are efforts to clean up some of the technical debt that is natural to\n    -    exist an a project that is more than 20 years old. Furthermore, we\n    +    exist in a project that is more than 20 years old. Furthermore, we\n         provide resources to newcomers that help them out like our coding\n         guidelines, code of conduct or \"MyFirstContribution.adoc\".\n     \n    @@ Commit message\n         already. Furthermore, we can further iterate after this step and think\n         about introducing a better structure for remaining files, as well.\n     \n    +    This move does not come for free though:\n    +\n    +      - The mass rename introduces a cutoff point in the history of every\n    +        moved file, as tools like git-log(1) do not follow renames by\n    +        default.\n    +\n    +      - Any in-flight or not-yet-submitted topic that touches the moved\n    +        files will have to be rebased, and backporting fixes across the\n    +        boundary becomes more cumbersome as a patch can no longer apply\n    +        cleanly to both the old and the new layout.\n    +\n    +    My own (obviously subjective and biased) take is that the tradeoff is\n    +    worth it, as these issues are a one-time cost while the benefits to\n    +    discoverability will be permanent.\n    +\n    +    Furthermore, especially the first downside is a limitation in Git\n    +    itself. We're not the first or last project to do such a mass rename. So\n    +    if our provided tools are insufficient, then we should improve them to\n    +    make the experience better for other projects, as well. Subjecting\n    +    ourselves to the same pain may even give us more incentive to eventually\n    +    improve rename following for everyone.\n    +\n         Signed-off-by: Patrick Steinhardt <ps@pks.im>\n     \n      ## .github/workflows/main.yml ##\n    @@ .github/workflows/main.yml: jobs:\n          - name: download vcpkg artifacts\n            uses: git-for-windows/get-azure-pipelines-artifact@v0\n            with:\n    -@@ .github/workflows/main.yml: jobs:\n    +         repository: git/git\n    +         definitionId: 9\n    ++        path: lib/compat\n    +     - name: add msbuild to PATH\n            uses: microsoft/setup-msbuild@v3\n          - name: copy dlls to root\n            shell: cmd\n\n---\nbase-commit: 0309c6da48e2f94a72c9cee6e95ac6a1d0d2c965\nchange-id: 20260415-pks-libgit-in-subdir-d8eec849cd48\n\n"},{"id":"546827","messageId":"20260701-pks-libgit-in-subdir-v3-1-5e4860056094@pks.im","threadId":"65899","inReplyTo":"20260701-pks-libgit-in-subdir-v3-0-5e4860056094@pks.im","subject":"[PATCH RFC v3 1/2] t/helper: prepare \"test-example-tap.c\" for introduction of \"lib/\"","fromName":"Patrick Steinhardt","fromEmail":"ps@pks.im","sentAt":"2026-07-01T06:59:26Z","receivedAt":"2026-07-01T06:59:41Z","isPatch":true,"body":"In the next commit we're about to introduce a new \"lib/\" directory and\nmove all of our files into it. With this split the compiler won't be\nable to find one of the includes in \"test-example-tap.c\" anymore. Adjust\nit to a relative include to prepare for this change.\n\nSigned-off-by: Patrick Steinhardt <ps@pks.im>\n---\n t/helper/test-example-tap.c | 2 +-\n 1 file changed, 1 insertion(+), 1 deletion(-)\n\ndiff --git a/t/helper/test-example-tap.c b/t/helper/test-example-tap.c\nindex 998a1f0b42..50d46669d1 100644\n--- a/t/helper/test-example-tap.c\n+++ b/t/helper/test-example-tap.c\n@@ -1,5 +1,5 @@\n #include \"test-tool.h\"\n-#include \"t/unit-tests/test-lib.h\"\n+#include \"../unit-tests/test-lib.h\"\n \n /*\n  * The purpose of this \"unit test\" is to verify a few invariants of the unit\n\n-- \n2.55.0.795.g602f6c329a.dirty\n\n"},{"id":"546829","messageId":"20260701-pks-libgit-in-subdir-v3-2-5e4860056094@pks.im","threadId":"65899","inReplyTo":"20260701-pks-libgit-in-subdir-v3-0-5e4860056094@pks.im","subject":"[PATCH RFC v3 2/2] Move libgit.a sources into separate \"lib/\" directory","fromName":"Patrick Steinhardt","fromEmail":"ps@pks.im","sentAt":"2026-07-01T06:59:27Z","receivedAt":"2026-07-01T06:59:45Z","isPatch":true,"body":"The Git project is not exactly the easiest project to get started in:\nit's written in C and POSIX shell, with bits of Perl, Rust and other\nlanguages sprinkled into it. On top of that, the project has grown\nsomewhat organically over time, making the codebase hard to navigate.\n\nThese are problems that we're aware of, and there have been and still\nare efforts to clean up some of the technical debt that is natural to\nexist in a project that is more than 20 years old. Furthermore, we\nprovide resources to newcomers that help them out like our coding\nguidelines, code of conduct or \"MyFirstContribution.adoc\".\n\nBut there is a rather practical problem: finding your way around in our\nproject's tree is not easy. Doing a directory listing in the top-level\ndirectory will present you with more than 550 files, which makes it\nextremely hard for a newcomer to figure out what files they are even\nsupposed to look at. This makes the onboarding experience somewhat\nharder than it really needs to be. This isn't only a problem for\nnewcomers though, as I myself struggle to find the files I am looking\nfor because of the sheer number of files.\n\nBesides the problem of discoverability it also creates a problem of\nstructure. It is not obvious at all which files are part of \"libgit.a\"\nand which files are only linked into our final executables. So while we\nhave this split in our build systems, that split is not evident at all\nin our tree.\n\nIntroduce a new \"lib/\" directory and move all of our sources for\n\"libgit.a\" into it to fix these issues. It makes the split we have\nevident and reduces the number of files in our top-level tree from 550\nfiles to ~80 files.\n\nThis is still a lot of files, but it's significantly easier to navigate\nalready. Furthermore, we can further iterate after this step and think\nabout introducing a better structure for remaining files, as well.\n\nThis move does not come for free though:\n\n  - The mass rename introduces a cutoff point in the history of every\n    moved file, as tools like git-log(1) do not follow renames by\n    default.\n\n  - Any in-flight or not-yet-submitted topic that touches the moved\n    files will have to be rebased, and backporting fixes across the\n    boundary becomes more cumbersome as a patch can no longer apply\n    cleanly to both the old and the new layout.\n\nMy own (obviously subjective and biased) take is that the tradeoff is\nworth it, as these issues are a one-time cost while the benefits to\ndiscoverability will be permanent.\n\nFurthermore, especially the first downside is a limitation in Git\nitself. We're not the first or last project to do such a mass rename. So\nif our provided tools are insufficient, then we should improve them to\nmake the experience better for other projects, as well. Subjecting\nourselves to the same pain may even give us more incentive to eventually\nimprove rename following for everyone.\n\nSigned-off-by: Patrick Steinhardt <ps@pks.im>\n---\n .github/workflows/main.yml                         |   9 +-\n .gitmodules                                        |   2 +-\n Documentation/Makefile                             |   4 +-\n Makefile                                           | 764 ++++++++++-----------\n config.mak.uname                                   |  52 +-\n contrib/buildsystems/CMakeLists.txt                |  95 +--\n git.rc.in                                          |   2 +-\n abspath.c => lib/abspath.c                         |   0\n abspath.h => lib/abspath.h                         |   0\n add-interactive.c => lib/add-interactive.c         |   0\n add-interactive.h => lib/add-interactive.h         |   0\n add-patch.c => lib/add-patch.c                     |   0\n add-patch.h => lib/add-patch.h                     |   0\n advice.c => lib/advice.c                           |   0\n advice.h => lib/advice.h                           |   0\n alias.c => lib/alias.c                             |   0\n alias.h => lib/alias.h                             |   0\n alloc.c => lib/alloc.c                             |   0\n alloc.h => lib/alloc.h                             |   0\n apply.c => lib/apply.c                             |   0\n apply.h => lib/apply.h                             |   0\n archive-tar.c => lib/archive-tar.c                 |   0\n archive-zip.c => lib/archive-zip.c                 |   0\n archive.c => lib/archive.c                         |   0\n archive.h => lib/archive.h                         |   0\n attr.c => lib/attr.c                               |   0\n attr.h => lib/attr.h                               |   0\n banned.h => lib/banned.h                           |   0\n base85.c => lib/base85.c                           |   0\n base85.h => lib/base85.h                           |   0\n bisect.c => lib/bisect.c                           |   0\n bisect.h => lib/bisect.h                           |   0\n blame.c => lib/blame.c                             |   0\n blame.h => lib/blame.h                             |   0\n blob.c => lib/blob.c                               |   0\n blob.h => lib/blob.h                               |   0\n {block-sha1 => lib/block-sha1}/sha1.c              |   0\n {block-sha1 => lib/block-sha1}/sha1.h              |   0\n bloom.c => lib/bloom.c                             |   0\n bloom.h => lib/bloom.h                             |   0\n branch.c => lib/branch.c                           |   0\n branch.h => lib/branch.h                           |   0\n builtin.h => lib/builtin.h                         |   0\n bundle-uri.c => lib/bundle-uri.c                   |   0\n bundle-uri.h => lib/bundle-uri.h                   |   0\n bundle.c => lib/bundle.c                           |   0\n bundle.h => lib/bundle.h                           |   0\n cache-tree.c => lib/cache-tree.c                   |   0\n cache-tree.h => lib/cache-tree.h                   |   0\n cbtree.c => lib/cbtree.c                           |   0\n cbtree.h => lib/cbtree.h                           |   0\n chdir-notify.c => lib/chdir-notify.c               |   0\n chdir-notify.h => lib/chdir-notify.h               |   0\n checkout.c => lib/checkout.c                       |   0\n checkout.h => lib/checkout.h                       |   0\n chunk-format.c => lib/chunk-format.c               |   0\n chunk-format.h => lib/chunk-format.h               |   0\n color.c => lib/color.c                             |   0\n color.h => lib/color.h                             |   0\n column.c => lib/column.c                           |   0\n column.h => lib/column.h                           |   0\n combine-diff.c => lib/combine-diff.c               |   0\n commit-graph.c => lib/commit-graph.c               |   0\n commit-graph.h => lib/commit-graph.h               |   0\n commit-reach.c => lib/commit-reach.c               |   0\n commit-reach.h => lib/commit-reach.h               |   0\n commit-slab-decl.h => lib/commit-slab-decl.h       |   0\n commit-slab-impl.h => lib/commit-slab-impl.h       |   0\n commit-slab.h => lib/commit-slab.h                 |   0\n commit.c => lib/commit.c                           |   0\n commit.h => lib/commit.h                           |   0\n common-exit.c => lib/common-exit.c                 |   0\n common-init.c => lib/common-init.c                 |   0\n common-init.h => lib/common-init.h                 |   0\n {compat => lib/compat}/.gitattributes              |   0\n {compat => lib/compat}/access.c                    |   0\n {compat => lib/compat}/apple-common-crypto.h       |   0\n {compat => lib/compat}/basename.c                  |   0\n {compat => lib/compat}/bswap.h                     |   0\n {compat => lib/compat}/compiler.h                  |   0\n {compat => lib/compat}/darwin/procinfo.c           |   0\n {compat => lib/compat}/disk.h                      |   0\n {compat => lib/compat}/fileno.c                    |   0\n {compat => lib/compat}/fopen.c                     |   0\n {compat => lib/compat}/fsmonitor/fsm-darwin-gcc.h  |   0\n .../compat}/fsmonitor/fsm-health-darwin.c          |   0\n .../compat}/fsmonitor/fsm-health-linux.c           |   0\n .../compat}/fsmonitor/fsm-health-win32.c           |   0\n {compat => lib/compat}/fsmonitor/fsm-health.h      |   0\n {compat => lib/compat}/fsmonitor/fsm-ipc-unix.c    |   0\n {compat => lib/compat}/fsmonitor/fsm-ipc-win32.c   |   0\n .../compat}/fsmonitor/fsm-listen-darwin.c          |   0\n .../compat}/fsmonitor/fsm-listen-linux.c           |   0\n .../compat}/fsmonitor/fsm-listen-win32.c           |   0\n {compat => lib/compat}/fsmonitor/fsm-listen.h      |   0\n .../compat}/fsmonitor/fsm-path-utils-darwin.c      |   0\n .../compat}/fsmonitor/fsm-path-utils-linux.c       |   0\n .../compat}/fsmonitor/fsm-path-utils-win32.c       |   0\n .../compat}/fsmonitor/fsm-settings-unix.c          |   0\n .../compat}/fsmonitor/fsm-settings-win32.c         |   0\n {compat => lib/compat}/hstrerror.c                 |   0\n {compat => lib/compat}/inet_ntop.c                 |   0\n {compat => lib/compat}/inet_pton.c                 |   0\n {compat => lib/compat}/linux/procinfo.c            |   0\n {compat => lib/compat}/memmem.c                    |   0\n {compat => lib/compat}/mingw-posix.h               |   0\n {compat => lib/compat}/mingw.c                     |   0\n {compat => lib/compat}/mingw.h                     |   0\n {compat => lib/compat}/mkdir.c                     |   0\n {compat => lib/compat}/mmap.c                      |   0\n {compat => lib/compat}/msvc-posix.h                |   0\n {compat => lib/compat}/msvc.c                      |   0\n {compat => lib/compat}/msvc.h                      |   0\n {compat => lib/compat}/nonblock.c                  |   0\n {compat => lib/compat}/nonblock.h                  |   0\n {compat => lib/compat}/obstack.c                   |   0\n {compat => lib/compat}/obstack.h                   |   0\n {compat => lib/compat}/open.c                      |   0\n {compat => lib/compat}/poll/poll.c                 |   0\n {compat => lib/compat}/poll/poll.h                 |   0\n {compat => lib/compat}/posix.h                     |   0\n {compat => lib/compat}/pread.c                     |   0\n {compat => lib/compat}/precompose_utf8.c           |   0\n {compat => lib/compat}/precompose_utf8.h           |   0\n {compat => lib/compat}/qsort_s.c                   |   0\n {compat => lib/compat}/regcomp_enhanced.c          |   0\n {compat => lib/compat}/regex/regcomp.c             |   0\n {compat => lib/compat}/regex/regex.c               |   0\n {compat => lib/compat}/regex/regex.h               |   0\n {compat => lib/compat}/regex/regex_internal.c      |   0\n {compat => lib/compat}/regex/regex_internal.h      |   0\n {compat => lib/compat}/regex/regexec.c             |   0\n {compat => lib/compat}/setenv.c                    |   0\n {compat => lib/compat}/sha1-chunked.c              |   0\n {compat => lib/compat}/sha1-chunked.h              |   0\n {compat => lib/compat}/simple-ipc/ipc-shared.c     |   0\n .../compat}/simple-ipc/ipc-unix-socket.c           |   0\n {compat => lib/compat}/simple-ipc/ipc-win32.c      |   0\n {compat => lib/compat}/snprintf.c                  |   0\n {compat => lib/compat}/stat.c                      |   0\n {compat => lib/compat}/strcasestr.c                |   0\n {compat => lib/compat}/strdup.c                    |   0\n {compat => lib/compat}/strlcpy.c                   |   0\n {compat => lib/compat}/strtoimax.c                 |   0\n {compat => lib/compat}/strtoumax.c                 |   0\n {compat => lib/compat}/stub/procinfo.c             |   0\n {compat => lib/compat}/terminal.c                  |   0\n {compat => lib/compat}/terminal.h                  |   0\n {compat => lib/compat}/unsetenv.c                  |   0\n {compat => lib/compat}/vcbuild/.gitignore          |   0\n {compat => lib/compat}/vcbuild/README              |  10 +-\n {compat => lib/compat}/vcbuild/find_vs_env.bat     |   2 +-\n {compat => lib/compat}/vcbuild/include/sys/param.h |   0\n {compat => lib/compat}/vcbuild/include/sys/time.h  |   0\n {compat => lib/compat}/vcbuild/include/sys/utime.h |   0\n {compat => lib/compat}/vcbuild/include/unistd.h    |   0\n {compat => lib/compat}/vcbuild/include/utime.h     |   0\n {compat => lib/compat}/vcbuild/scripts/clink.pl    |   0\n {compat => lib/compat}/vcbuild/scripts/lib.pl      |   0\n {compat => lib/compat}/vcbuild/vcpkg_copy_dlls.bat |   0\n {compat => lib/compat}/vcbuild/vcpkg_install.bat   |   4 +-\n {compat => lib/compat}/win32.h                     |   0\n {compat => lib/compat}/win32/alloca.h              |   0\n {compat => lib/compat}/win32/dirent.c              |   0\n {compat => lib/compat}/win32/dirent.h              |   0\n {compat => lib/compat}/win32/exit-process.h        |   0\n {compat => lib/compat}/win32/flush.c               |   0\n {compat => lib/compat}/win32/git.manifest          |   0\n {compat => lib/compat}/win32/headless.c            |   0\n {compat => lib/compat}/win32/lazyload.h            |   0\n {compat => lib/compat}/win32/path-utils.c          |   0\n {compat => lib/compat}/win32/path-utils.h          |   0\n {compat => lib/compat}/win32/pthread.c             |   0\n {compat => lib/compat}/win32/pthread.h             |   0\n {compat => lib/compat}/win32/syslog.c              |   0\n {compat => lib/compat}/win32/syslog.h              |   0\n .../compat}/win32/trace2_win32_process_info.c      |   0\n {compat => lib/compat}/win32mmap.c                 |   0\n {compat => lib/compat}/winansi.c                   |   0\n {compat => lib/compat}/zlib-compat.h               |   0\n .../compiler-tricks}/not-constant.c                |   0\n config.c => lib/config.c                           |   0\n config.h => lib/config.h                           |   0\n connect.c => lib/connect.c                         |   0\n connect.h => lib/connect.h                         |   0\n connected.c => lib/connected.c                     |   0\n connected.h => lib/connected.h                     |   0\n convert.c => lib/convert.c                         |   0\n convert.h => lib/convert.h                         |   0\n copy.c => lib/copy.c                               |   0\n copy.h => lib/copy.h                               |   0\n credential.c => lib/credential.c                   |   0\n credential.h => lib/credential.h                   |   0\n csum-file.c => lib/csum-file.c                     |   0\n csum-file.h => lib/csum-file.h                     |   0\n ctype.c => lib/ctype.c                             |   0\n date.c => lib/date.c                               |   0\n date.h => lib/date.h                               |   0\n decorate.c => lib/decorate.c                       |   0\n decorate.h => lib/decorate.h                       |   0\n delta-islands.c => lib/delta-islands.c             |   0\n delta-islands.h => lib/delta-islands.h             |   0\n delta.h => lib/delta.h                             |   0\n diagnose.c => lib/diagnose.c                       |   0\n diagnose.h => lib/diagnose.h                       |   0\n diff-delta.c => lib/diff-delta.c                   |   0\n diff-lib.c => lib/diff-lib.c                       |   0\n diff-merges.c => lib/diff-merges.c                 |   0\n diff-merges.h => lib/diff-merges.h                 |   0\n diff-no-index.c => lib/diff-no-index.c             |   0\n diff.c => lib/diff.c                               |   0\n diff.h => lib/diff.h                               |   0\n diffcore-break.c => lib/diffcore-break.c           |   0\n diffcore-delta.c => lib/diffcore-delta.c           |   0\n diffcore-order.c => lib/diffcore-order.c           |   0\n diffcore-pickaxe.c => lib/diffcore-pickaxe.c       |   0\n diffcore-rename.c => lib/diffcore-rename.c         |   0\n diffcore-rotate.c => lib/diffcore-rotate.c         |   0\n diffcore.h => lib/diffcore.h                       |   0\n dir-iterator.c => lib/dir-iterator.c               |   0\n dir-iterator.h => lib/dir-iterator.h               |   0\n dir.c => lib/dir.c                                 |   0\n dir.h => lib/dir.h                                 |   0\n editor.c => lib/editor.c                           |   0\n editor.h => lib/editor.h                           |   0\n entry.c => lib/entry.c                             |   0\n entry.h => lib/entry.h                             |   0\n environment.c => lib/environment.c                 |   0\n environment.h => lib/environment.h                 |   0\n {ewah => lib/ewah}/bitmap.c                        |   0\n {ewah => lib/ewah}/ewah_bitmap.c                   |   0\n {ewah => lib/ewah}/ewah_io.c                       |   0\n {ewah => lib/ewah}/ewah_rlw.c                      |   0\n {ewah => lib/ewah}/ewok.h                          |   0\n {ewah => lib/ewah}/ewok_rlw.h                      |   0\n exec-cmd.c => lib/exec-cmd.c                       |   0\n exec-cmd.h => lib/exec-cmd.h                       |   0\n fetch-negotiator.c => lib/fetch-negotiator.c       |   0\n fetch-negotiator.h => lib/fetch-negotiator.h       |   0\n fetch-pack.c => lib/fetch-pack.c                   |   0\n fetch-pack.h => lib/fetch-pack.h                   |   0\n fmt-merge-msg.c => lib/fmt-merge-msg.c             |   0\n fmt-merge-msg.h => lib/fmt-merge-msg.h             |   0\n for-each-ref.h => lib/for-each-ref.h               |   0\n fsck.c => lib/fsck.c                               |   0\n fsck.h => lib/fsck.h                               |   0\n fsmonitor--daemon.h => lib/fsmonitor--daemon.h     |   0\n fsmonitor-ipc.c => lib/fsmonitor-ipc.c             |   0\n fsmonitor-ipc.h => lib/fsmonitor-ipc.h             |   0\n fsmonitor-ll.h => lib/fsmonitor-ll.h               |   0\n .../fsmonitor-path-utils.h                         |   0\n fsmonitor-settings.c => lib/fsmonitor-settings.c   |   0\n fsmonitor-settings.h => lib/fsmonitor-settings.h   |   0\n fsmonitor.c => lib/fsmonitor.c                     |   0\n fsmonitor.h => lib/fsmonitor.h                     |   0\n gettext.c => lib/gettext.c                         |   0\n gettext.h => lib/gettext.h                         |   0\n git-compat-util.h => lib/git-compat-util.h         |   0\n git-curl-compat.h => lib/git-curl-compat.h         |   0\n git-zlib.c => lib/git-zlib.c                       |   0\n git-zlib.h => lib/git-zlib.h                       |   0\n gpg-interface.c => lib/gpg-interface.c             |   0\n gpg-interface.h => lib/gpg-interface.h             |   0\n graph.c => lib/graph.c                             |   0\n graph.h => lib/graph.h                             |   0\n grep.c => lib/grep.c                               |   0\n grep.h => lib/grep.h                               |   0\n hash-lookup.c => lib/hash-lookup.c                 |   0\n hash-lookup.h => lib/hash-lookup.h                 |   0\n hash.c => lib/hash.c                               |   0\n hash.h => lib/hash.h                               |   0\n hashmap.c => lib/hashmap.c                         |   0\n hashmap.h => lib/hashmap.h                         |   0\n help.c => lib/help.c                               |   0\n help.h => lib/help.h                               |   0\n hex-ll.c => lib/hex-ll.c                           |   0\n hex-ll.h => lib/hex-ll.h                           |   0\n hex.c => lib/hex.c                                 |   0\n hex.h => lib/hex.h                                 |   0\n hook.c => lib/hook.c                               |   0\n hook.h => lib/hook.h                               |   0\n http-walker.c => lib/http-walker.c                 |   0\n http.c => lib/http.c                               |   0\n http.h => lib/http.h                               |   0\n ident.c => lib/ident.c                             |   0\n ident.h => lib/ident.h                             |   0\n iterator.h => lib/iterator.h                       |   0\n json-writer.c => lib/json-writer.c                 |   0\n json-writer.h => lib/json-writer.h                 |   0\n khash.h => lib/khash.h                             |   0\n kwset.c => lib/kwset.c                             |   0\n kwset.h => lib/kwset.h                             |   0\n levenshtein.c => lib/levenshtein.c                 |   0\n levenshtein.h => lib/levenshtein.h                 |   0\n line-log.c => lib/line-log.c                       |   0\n line-log.h => lib/line-log.h                       |   0\n line-range.c => lib/line-range.c                   |   0\n line-range.h => lib/line-range.h                   |   0\n linear-assignment.c => lib/linear-assignment.c     |   0\n linear-assignment.h => lib/linear-assignment.h     |   0\n .../list-objects-filter-options.c                  |   0\n .../list-objects-filter-options.h                  |   0\n list-objects-filter.c => lib/list-objects-filter.c |   0\n list-objects-filter.h => lib/list-objects-filter.h |   0\n list-objects.c => lib/list-objects.c               |   0\n list-objects.h => lib/list-objects.h               |   0\n list.h => lib/list.h                               |   0\n lockfile.c => lib/lockfile.c                       |   0\n lockfile.h => lib/lockfile.h                       |   0\n log-tree.c => lib/log-tree.c                       |   0\n log-tree.h => lib/log-tree.h                       |   0\n loose.c => lib/loose.c                             |   0\n loose.h => lib/loose.h                             |   0\n ls-refs.c => lib/ls-refs.c                         |   0\n ls-refs.h => lib/ls-refs.h                         |   0\n mailinfo.c => lib/mailinfo.c                       |   0\n mailinfo.h => lib/mailinfo.h                       |   0\n mailmap.c => lib/mailmap.c                         |   0\n mailmap.h => lib/mailmap.h                         |   0\n match-trees.c => lib/match-trees.c                 |   0\n match-trees.h => lib/match-trees.h                 |   0\n mem-pool.c => lib/mem-pool.c                       |   0\n mem-pool.h => lib/mem-pool.h                       |   0\n merge-blobs.c => lib/merge-blobs.c                 |   0\n merge-blobs.h => lib/merge-blobs.h                 |   0\n merge-ll.c => lib/merge-ll.c                       |   0\n merge-ll.h => lib/merge-ll.h                       |   0\n merge-ort-wrappers.c => lib/merge-ort-wrappers.c   |   0\n merge-ort-wrappers.h => lib/merge-ort-wrappers.h   |   0\n merge-ort.c => lib/merge-ort.c                     |   0\n merge-ort.h => lib/merge-ort.h                     |   0\n merge.c => lib/merge.c                             |   0\n merge.h => lib/merge.h                             |   0\n mergesort.h => lib/mergesort.h                     |   0\n midx-write.c => lib/midx-write.c                   |   0\n midx.c => lib/midx.c                               |   0\n midx.h => lib/midx.h                               |   0\n name-hash.c => lib/name-hash.c                     |   0\n name-hash.h => lib/name-hash.h                     |   0\n {negotiator => lib/negotiator}/default.c           |   0\n {negotiator => lib/negotiator}/default.h           |   0\n {negotiator => lib/negotiator}/noop.c              |   0\n {negotiator => lib/negotiator}/noop.h              |   0\n {negotiator => lib/negotiator}/skipping.c          |   0\n {negotiator => lib/negotiator}/skipping.h          |   0\n notes-cache.c => lib/notes-cache.c                 |   0\n notes-cache.h => lib/notes-cache.h                 |   0\n notes-merge.c => lib/notes-merge.c                 |   0\n notes-merge.h => lib/notes-merge.h                 |   0\n notes-utils.c => lib/notes-utils.c                 |   0\n notes-utils.h => lib/notes-utils.h                 |   0\n notes.c => lib/notes.c                             |   0\n notes.h => lib/notes.h                             |   0\n object-file-convert.c => lib/object-file-convert.c |   0\n object-file-convert.h => lib/object-file-convert.h |   0\n object-file.c => lib/object-file.c                 |   0\n object-file.h => lib/object-file.h                 |   0\n object-name.c => lib/object-name.c                 |   0\n object-name.h => lib/object-name.h                 |   0\n object.c => lib/object.c                           |   0\n object.h => lib/object.h                           |   0\n odb.c => lib/odb.c                                 |   0\n odb.h => lib/odb.h                                 |   0\n {odb => lib/odb}/source-files.c                    |   0\n {odb => lib/odb}/source-files.h                    |   0\n {odb => lib/odb}/source-inmemory.c                 |   0\n {odb => lib/odb}/source-inmemory.h                 |   0\n {odb => lib/odb}/source-loose.c                    |   0\n {odb => lib/odb}/source-loose.h                    |   0\n {odb => lib/odb}/source-packed.c                   |   0\n {odb => lib/odb}/source-packed.h                   |   0\n {odb => lib/odb}/source.c                          |   0\n {odb => lib/odb}/source.h                          |   0\n {odb => lib/odb}/streaming.c                       |   0\n {odb => lib/odb}/streaming.h                       |   0\n {odb => lib/odb}/transaction.c                     |   0\n {odb => lib/odb}/transaction.h                     |   0\n oid-array.c => lib/oid-array.c                     |   0\n oid-array.h => lib/oid-array.h                     |   0\n oidmap.c => lib/oidmap.c                           |   0\n oidmap.h => lib/oidmap.h                           |   0\n oidset.c => lib/oidset.c                           |   0\n oidset.h => lib/oidset.h                           |   0\n oidtree.c => lib/oidtree.c                         |   0\n oidtree.h => lib/oidtree.h                         |   0\n pack-bitmap-write.c => lib/pack-bitmap-write.c     |   0\n pack-bitmap.c => lib/pack-bitmap.c                 |   0\n pack-bitmap.h => lib/pack-bitmap.h                 |   0\n pack-check.c => lib/pack-check.c                   |   0\n pack-mtimes.c => lib/pack-mtimes.c                 |   0\n pack-mtimes.h => lib/pack-mtimes.h                 |   0\n pack-objects.c => lib/pack-objects.c               |   0\n pack-objects.h => lib/pack-objects.h               |   0\n pack-refs.c => lib/pack-refs.c                     |   0\n pack-refs.h => lib/pack-refs.h                     |   0\n pack-revindex.c => lib/pack-revindex.c             |   0\n pack-revindex.h => lib/pack-revindex.h             |   0\n pack-write.c => lib/pack-write.c                   |   0\n pack.h => lib/pack.h                               |   0\n packfile-list.c => lib/packfile-list.c             |   0\n packfile-list.h => lib/packfile-list.h             |   0\n packfile.c => lib/packfile.c                       |   0\n packfile.h => lib/packfile.h                       |   0\n pager.c => lib/pager.c                             |   0\n pager.h => lib/pager.h                             |   0\n parallel-checkout.c => lib/parallel-checkout.c     |   0\n parallel-checkout.h => lib/parallel-checkout.h     |   0\n parse-options-cb.c => lib/parse-options-cb.c       |   0\n parse-options.c => lib/parse-options.c             |   0\n parse-options.h => lib/parse-options.h             |   0\n parse.c => lib/parse.c                             |   0\n parse.h => lib/parse.h                             |   0\n patch-delta.c => lib/patch-delta.c                 |   0\n patch-ids.c => lib/patch-ids.c                     |   0\n patch-ids.h => lib/patch-ids.h                     |   0\n path-walk.c => lib/path-walk.c                     |   0\n path-walk.h => lib/path-walk.h                     |   0\n path.c => lib/path.c                               |   0\n path.h => lib/path.h                               |   0\n pathspec.c => lib/pathspec.c                       |   0\n pathspec.h => lib/pathspec.h                       |   0\n pkt-line.c => lib/pkt-line.c                       |   0\n pkt-line.h => lib/pkt-line.h                       |   0\n preload-index.c => lib/preload-index.c             |   0\n preload-index.h => lib/preload-index.h             |   0\n pretty.c => lib/pretty.c                           |   0\n pretty.h => lib/pretty.h                           |   0\n prio-queue.c => lib/prio-queue.c                   |   0\n prio-queue.h => lib/prio-queue.h                   |   0\n progress.c => lib/progress.c                       |   0\n progress.h => lib/progress.h                       |   0\n promisor-remote.c => lib/promisor-remote.c         |   0\n promisor-remote.h => lib/promisor-remote.h         |   0\n prompt.c => lib/prompt.c                           |   0\n prompt.h => lib/prompt.h                           |   0\n protocol-caps.c => lib/protocol-caps.c             |   0\n protocol-caps.h => lib/protocol-caps.h             |   0\n protocol.c => lib/protocol.c                       |   0\n protocol.h => lib/protocol.h                       |   0\n prune-packed.c => lib/prune-packed.c               |   0\n prune-packed.h => lib/prune-packed.h               |   0\n pseudo-merge.c => lib/pseudo-merge.c               |   0\n pseudo-merge.h => lib/pseudo-merge.h               |   0\n quote.c => lib/quote.c                             |   0\n quote.h => lib/quote.h                             |   0\n range-diff.c => lib/range-diff.c                   |   0\n range-diff.h => lib/range-diff.h                   |   0\n reachable.c => lib/reachable.c                     |   0\n reachable.h => lib/reachable.h                     |   0\n read-cache-ll.h => lib/read-cache-ll.h             |   0\n read-cache.c => lib/read-cache.c                   |   0\n read-cache.h => lib/read-cache.h                   |   0\n rebase-interactive.c => lib/rebase-interactive.c   |   0\n rebase-interactive.h => lib/rebase-interactive.h   |   0\n rebase.c => lib/rebase.c                           |   0\n rebase.h => lib/rebase.h                           |   0\n ref-filter.c => lib/ref-filter.c                   |   0\n ref-filter.h => lib/ref-filter.h                   |   0\n reflog-walk.c => lib/reflog-walk.c                 |   0\n reflog-walk.h => lib/reflog-walk.h                 |   0\n reflog.c => lib/reflog.c                           |   0\n reflog.h => lib/reflog.h                           |   0\n refs.c => lib/refs.c                               |   0\n refs.h => lib/refs.h                               |   0\n {refs => lib/refs}/debug.c                         |   0\n {refs => lib/refs}/files-backend.c                 |   0\n {refs => lib/refs}/iterator.c                      |   0\n {refs => lib/refs}/packed-backend.c                |   0\n {refs => lib/refs}/packed-backend.h                |   0\n {refs => lib/refs}/ref-cache.c                     |   0\n {refs => lib/refs}/ref-cache.h                     |   0\n {refs => lib/refs}/refs-internal.h                 |   0\n {refs => lib/refs}/reftable-backend.c              |   0\n refspec.c => lib/refspec.c                         |   0\n refspec.h => lib/refspec.h                         |   0\n {reftable => lib/reftable}/LICENSE                 |   0\n {reftable => lib/reftable}/basics.c                |   0\n {reftable => lib/reftable}/basics.h                |   0\n {reftable => lib/reftable}/block.c                 |   0\n {reftable => lib/reftable}/block.h                 |   0\n {reftable => lib/reftable}/blocksource.c           |   0\n {reftable => lib/reftable}/blocksource.h           |   0\n {reftable => lib/reftable}/constants.h             |   0\n {reftable => lib/reftable}/error.c                 |   0\n {reftable => lib/reftable}/fsck.c                  |   0\n {reftable => lib/reftable}/iter.c                  |   0\n {reftable => lib/reftable}/iter.h                  |   0\n {reftable => lib/reftable}/merged.c                |   0\n {reftable => lib/reftable}/merged.h                |   0\n {reftable => lib/reftable}/pq.c                    |   0\n {reftable => lib/reftable}/pq.h                    |   0\n {reftable => lib/reftable}/record.c                |   0\n {reftable => lib/reftable}/record.h                |   0\n {reftable => lib/reftable}/reftable-basics.h       |   0\n {reftable => lib/reftable}/reftable-block.h        |   0\n {reftable => lib/reftable}/reftable-blocksource.h  |   0\n {reftable => lib/reftable}/reftable-constants.h    |   0\n {reftable => lib/reftable}/reftable-error.h        |   0\n {reftable => lib/reftable}/reftable-fsck.h         |   0\n {reftable => lib/reftable}/reftable-iterator.h     |   0\n {reftable => lib/reftable}/reftable-merged.h       |   0\n {reftable => lib/reftable}/reftable-record.h       |   0\n {reftable => lib/reftable}/reftable-stack.h        |   0\n {reftable => lib/reftable}/reftable-system.h       |   0\n {reftable => lib/reftable}/reftable-table.h        |   0\n {reftable => lib/reftable}/reftable-writer.h       |   0\n {reftable => lib/reftable}/stack.c                 |   0\n {reftable => lib/reftable}/stack.h                 |   0\n {reftable => lib/reftable}/system.c                |   0\n {reftable => lib/reftable}/system.h                |   0\n {reftable => lib/reftable}/table.c                 |   0\n {reftable => lib/reftable}/table.h                 |   0\n {reftable => lib/reftable}/tree.c                  |   0\n {reftable => lib/reftable}/tree.h                  |   0\n {reftable => lib/reftable}/writer.c                |   0\n {reftable => lib/reftable}/writer.h                |   0\n remote.c => lib/remote.c                           |   0\n remote.h => lib/remote.h                           |   0\n repack-cruft.c => lib/repack-cruft.c               |   0\n repack-filtered.c => lib/repack-filtered.c         |   0\n repack-geometry.c => lib/repack-geometry.c         |   0\n repack-midx.c => lib/repack-midx.c                 |   0\n repack-promisor.c => lib/repack-promisor.c         |   0\n repack.c => lib/repack.c                           |   0\n repack.h => lib/repack.h                           |   0\n replace-object.c => lib/replace-object.c           |   0\n replace-object.h => lib/replace-object.h           |   0\n replay.c => lib/replay.c                           |   0\n replay.h => lib/replay.h                           |   0\n repo-settings.c => lib/repo-settings.c             |   0\n repo-settings.h => lib/repo-settings.h             |   0\n repository.c => lib/repository.c                   |   0\n repository.h => lib/repository.h                   |   0\n rerere.c => lib/rerere.c                           |   0\n rerere.h => lib/rerere.h                           |   0\n reset.c => lib/reset.c                             |   0\n reset.h => lib/reset.h                             |   0\n resolve-undo.c => lib/resolve-undo.c               |   0\n resolve-undo.h => lib/resolve-undo.h               |   0\n revision.c => lib/revision.c                       |   0\n revision.h => lib/revision.h                       |   0\n run-command.c => lib/run-command.c                 |   0\n run-command.h => lib/run-command.h                 |   0\n sane-ctype.h => lib/sane-ctype.h                   |   0\n send-pack.c => lib/send-pack.c                     |   0\n send-pack.h => lib/send-pack.h                     |   0\n sequencer.c => lib/sequencer.c                     |   0\n sequencer.h => lib/sequencer.h                     |   0\n serve.c => lib/serve.c                             |   0\n serve.h => lib/serve.h                             |   0\n server-info.c => lib/server-info.c                 |   0\n server-info.h => lib/server-info.h                 |   0\n setup.c => lib/setup.c                             |   0\n setup.h => lib/setup.h                             |   0\n {sha1 => lib/sha1}/openssl.h                       |   0\n .../sha1collisiondetection                         |   0\n {sha1dc => lib/sha1dc}/.gitattributes              |   0\n {sha1dc => lib/sha1dc}/LICENSE.txt                 |   0\n {sha1dc => lib/sha1dc}/sha1.c                      |   0\n {sha1dc => lib/sha1dc}/sha1.h                      |   0\n {sha1dc => lib/sha1dc}/ubc_check.c                 |   0\n {sha1dc => lib/sha1dc}/ubc_check.h                 |   0\n sha1dc_git.c => lib/sha1dc_git.c                   |   0\n sha1dc_git.h => lib/sha1dc_git.h                   |   0\n {sha256 => lib/sha256}/block/sha256.c              |   0\n {sha256 => lib/sha256}/block/sha256.h              |   0\n {sha256 => lib/sha256}/gcrypt.h                    |   0\n {sha256 => lib/sha256}/nettle.h                    |   0\n {sha256 => lib/sha256}/openssl.h                   |   0\n shallow.c => lib/shallow.c                         |   0\n shallow.h => lib/shallow.h                         |   0\n shortlog.h => lib/shortlog.h                       |   0\n sideband.c => lib/sideband.c                       |   0\n sideband.h => lib/sideband.h                       |   0\n sigchain.c => lib/sigchain.c                       |   0\n sigchain.h => lib/sigchain.h                       |   0\n simple-ipc.h => lib/simple-ipc.h                   |   0\n sparse-index.c => lib/sparse-index.c               |   0\n sparse-index.h => lib/sparse-index.h               |   0\n split-index.c => lib/split-index.c                 |   0\n split-index.h => lib/split-index.h                 |   0\n stable-qsort.c => lib/stable-qsort.c               |   0\n statinfo.c => lib/statinfo.c                       |   0\n statinfo.h => lib/statinfo.h                       |   0\n strbuf.c => lib/strbuf.c                           |   0\n strbuf.h => lib/strbuf.h                           |   0\n string-list.c => lib/string-list.c                 |   0\n string-list.h => lib/string-list.h                 |   0\n strmap.c => lib/strmap.c                           |   0\n strmap.h => lib/strmap.h                           |   0\n strvec.c => lib/strvec.c                           |   0\n strvec.h => lib/strvec.h                           |   0\n sub-process.c => lib/sub-process.c                 |   0\n sub-process.h => lib/sub-process.h                 |   0\n submodule-config.c => lib/submodule-config.c       |   0\n submodule-config.h => lib/submodule-config.h       |   0\n submodule.c => lib/submodule.c                     |   0\n submodule.h => lib/submodule.h                     |   0\n symlinks.c => lib/symlinks.c                       |   0\n symlinks.h => lib/symlinks.h                       |   0\n tag.c => lib/tag.c                                 |   0\n tag.h => lib/tag.h                                 |   0\n tar.h => lib/tar.h                                 |   0\n tempfile.c => lib/tempfile.c                       |   0\n tempfile.h => lib/tempfile.h                       |   0\n thread-utils.c => lib/thread-utils.c               |   0\n thread-utils.h => lib/thread-utils.h               |   0\n tmp-objdir.c => lib/tmp-objdir.c                   |   0\n tmp-objdir.h => lib/tmp-objdir.h                   |   0\n trace.c => lib/trace.c                             |   0\n trace.h => lib/trace.h                             |   0\n trace2.c => lib/trace2.c                           |   0\n trace2.h => lib/trace2.h                           |   0\n {trace2 => lib/trace2}/tr2_cfg.c                   |   0\n {trace2 => lib/trace2}/tr2_cfg.h                   |   0\n {trace2 => lib/trace2}/tr2_cmd_name.c              |   0\n {trace2 => lib/trace2}/tr2_cmd_name.h              |   0\n {trace2 => lib/trace2}/tr2_ctr.c                   |   0\n {trace2 => lib/trace2}/tr2_ctr.h                   |   0\n {trace2 => lib/trace2}/tr2_dst.c                   |   0\n {trace2 => lib/trace2}/tr2_dst.h                   |   0\n {trace2 => lib/trace2}/tr2_sid.c                   |   0\n {trace2 => lib/trace2}/tr2_sid.h                   |   0\n {trace2 => lib/trace2}/tr2_sysenv.c                |   0\n {trace2 => lib/trace2}/tr2_sysenv.h                |   0\n {trace2 => lib/trace2}/tr2_tbuf.c                  |   0\n {trace2 => lib/trace2}/tr2_tbuf.h                  |   0\n {trace2 => lib/trace2}/tr2_tgt.h                   |   0\n {trace2 => lib/trace2}/tr2_tgt_event.c             |   0\n {trace2 => lib/trace2}/tr2_tgt_normal.c            |   0\n {trace2 => lib/trace2}/tr2_tgt_perf.c              |   0\n {trace2 => lib/trace2}/tr2_tls.c                   |   0\n {trace2 => lib/trace2}/tr2_tls.h                   |   0\n {trace2 => lib/trace2}/tr2_tmr.c                   |   0\n {trace2 => lib/trace2}/tr2_tmr.h                   |   0\n trailer.c => lib/trailer.c                         |   0\n trailer.h => lib/trailer.h                         |   0\n transport-helper.c => lib/transport-helper.c       |   0\n transport-internal.h => lib/transport-internal.h   |   0\n transport.c => lib/transport.c                     |   0\n transport.h => lib/transport.h                     |   0\n tree-diff.c => lib/tree-diff.c                     |   0\n tree-walk.c => lib/tree-walk.c                     |   0\n tree-walk.h => lib/tree-walk.h                     |   0\n tree.c => lib/tree.c                               |   0\n tree.h => lib/tree.h                               |   0\n unicode-width.h => lib/unicode-width.h             |   0\n unix-socket.c => lib/unix-socket.c                 |   0\n unix-socket.h => lib/unix-socket.h                 |   0\n unix-stream-server.c => lib/unix-stream-server.c   |   0\n unix-stream-server.h => lib/unix-stream-server.h   |   0\n unpack-trees.c => lib/unpack-trees.c               |   0\n unpack-trees.h => lib/unpack-trees.h               |   0\n upload-pack.c => lib/upload-pack.c                 |   0\n upload-pack.h => lib/upload-pack.h                 |   0\n url.c => lib/url.c                                 |   0\n url.h => lib/url.h                                 |   0\n urlmatch.c => lib/urlmatch.c                       |   0\n urlmatch.h => lib/urlmatch.h                       |   0\n usage.c => lib/usage.c                             |   0\n userdiff.c => lib/userdiff.c                       |   0\n userdiff.h => lib/userdiff.h                       |   0\n utf8.c => lib/utf8.c                               |   0\n utf8.h => lib/utf8.h                               |   0\n varint.c => lib/varint.c                           |   0\n varint.h => lib/varint.h                           |   0\n version-def.h.in => lib/version-def.h.in           |   0\n version.c => lib/version.c                         |   0\n version.h => lib/version.h                         |   0\n versioncmp.c => lib/versioncmp.c                   |   0\n versioncmp.h => lib/versioncmp.h                   |   0\n walker.c => lib/walker.c                           |   0\n walker.h => lib/walker.h                           |   0\n wildmatch.c => lib/wildmatch.c                     |   0\n wildmatch.h => lib/wildmatch.h                     |   0\n worktree.c => lib/worktree.c                       |   0\n worktree.h => lib/worktree.h                       |   0\n wrapper.c => lib/wrapper.c                         |   0\n wrapper.h => lib/wrapper.h                         |   0\n write-or-die.c => lib/write-or-die.c               |   0\n write-or-die.h => lib/write-or-die.h               |   0\n ws.c => lib/ws.c                                   |   0\n ws.h => lib/ws.h                                   |   0\n wt-status.c => lib/wt-status.c                     |   0\n wt-status.h => lib/wt-status.h                     |   0\n xdiff-interface.c => lib/xdiff-interface.c         |   0\n xdiff-interface.h => lib/xdiff-interface.h         |   0\n {xdiff => lib/xdiff}/xdiff.h                       |   0\n {xdiff => lib/xdiff}/xdiffi.c                      |   0\n {xdiff => lib/xdiff}/xdiffi.h                      |   0\n {xdiff => lib/xdiff}/xemit.c                       |   0\n {xdiff => lib/xdiff}/xemit.h                       |   0\n {xdiff => lib/xdiff}/xhistogram.c                  |   0\n {xdiff => lib/xdiff}/xinclude.h                    |   0\n {xdiff => lib/xdiff}/xmacros.h                     |   0\n {xdiff => lib/xdiff}/xmerge.c                      |   0\n {xdiff => lib/xdiff}/xpatience.c                   |   0\n {xdiff => lib/xdiff}/xprepare.c                    |   0\n {xdiff => lib/xdiff}/xprepare.h                    |   0\n {xdiff => lib/xdiff}/xtypes.h                      |   0\n {xdiff => lib/xdiff}/xutils.c                      |   0\n {xdiff => lib/xdiff}/xutils.h                      |   0\n meson.build                                        | 700 +++++++++----------\n 703 files changed, 823 insertions(+), 821 deletions(-)\n\ndiff --git a/.github/workflows/main.yml b/.github/workflows/main.yml\nindex cf341d74db..accf456945 100644\n--- a/.github/workflows/main.yml\n+++ b/.github/workflows/main.yml\n@@ -179,21 +179,22 @@ jobs:\n       uses: actions/checkout@v6\n       with:\n         repository: 'microsoft/vcpkg'\n-        path: 'compat/vcbuild/vcpkg'\n+        path: 'lib/compat/vcbuild/vcpkg'\n     - name: download vcpkg artifacts\n       uses: git-for-windows/get-azure-pipelines-artifact@v0\n       with:\n         repository: git/git\n         definitionId: 9\n+        path: lib/compat\n     - name: add msbuild to PATH\n       uses: microsoft/setup-msbuild@v3\n     - name: copy dlls to root\n       shell: cmd\n-      run: compat\\vcbuild\\vcpkg_copy_dlls.bat release\n+      run: lib\\compat\\vcbuild\\vcpkg_copy_dlls.bat release\n     - name: generate Visual Studio solution\n       shell: bash\n       run: |\n-        cmake `pwd`/contrib/buildsystems/ -DCMAKE_PREFIX_PATH=`pwd`/compat/vcbuild/vcpkg/installed/x64-windows \\\n+        cmake `pwd`/contrib/buildsystems/ -DCMAKE_PREFIX_PATH=`pwd`/lib/compat/vcbuild/vcpkg/installed/x64-windows \\\n         -DNO_GETTEXT=YesPlease -DPERL_TESTS=OFF -DPYTHON_TESTS=OFF -DCURL_NO_CURL_CMAKE=ON\n     - name: MSBuild\n       run: msbuild git.sln -property:Configuration=Release -property:Platform=x64 -maxCpuCount:4 -property:PlatformToolset=v142\n@@ -201,7 +202,7 @@ jobs:\n       shell: bash\n       env:\n         MSVC: 1\n-        VCPKG_ROOT: ${{github.workspace}}\\compat\\vcbuild\\vcpkg\n+        VCPKG_ROOT: ${{github.workspace}}\\lib\\compat\\vcbuild\\vcpkg\n       run: |\n         mkdir -p artifacts &&\n         eval \"$(make -n artifacts-tar INCLUDE_DLLS_IN_ARTIFACTS=YesPlease ARTIFACTS_DIRECTORY=artifacts NO_GETTEXT=YesPlease 2>&1 | grep ^tar)\"\ndiff --git a/.gitmodules b/.gitmodules\nindex cbeebdab7a..8bafb8bb49 100644\n--- a/.gitmodules\n+++ b/.gitmodules\n@@ -1,4 +1,4 @@\n [submodule \"sha1collisiondetection\"]\n-\tpath = sha1collisiondetection\n+\tpath = lib/sha1collisiondetection\n \turl = https://github.com/cr-marcstevens/sha1collisiondetection.git\n \tbranch = master\ndiff --git a/Documentation/Makefile b/Documentation/Makefile\nindex 2699f0b24a..c4fd5a5c87 100644\n--- a/Documentation/Makefile\n+++ b/Documentation/Makefile\n@@ -505,10 +505,10 @@ lint-docs-man-section-order: $(LINT_DOCS_MAN_SECTION_ORDER)\n .PHONY: lint-docs-fsck-msgids\n LINT_DOCS_FSCK_MSGIDS = .build/lint-docs/fsck-msgids.ok\n $(LINT_DOCS_FSCK_MSGIDS): lint-fsck-msgids.perl\n-$(LINT_DOCS_FSCK_MSGIDS): ../fsck.h fsck-msgids.adoc\n+$(LINT_DOCS_FSCK_MSGIDS): ../lib/fsck.h fsck-msgids.adoc\n \t$(call mkdir_p_parent_template)\n \t$(QUIET_GEN)$(PERL_PATH) lint-fsck-msgids.perl \\\n-\t\t../fsck.h fsck-msgids.adoc $@\n+\t\t../lib/fsck.h fsck-msgids.adoc $@\n lint-docs-fsck-msgids: $(LINT_DOCS_FSCK_MSGIDS)\n \n ## Lint: delimited sections\ndiff --git a/Makefile b/Makefile\nindex 1f3f099f5c..4afe497ab3 100644\n--- a/Makefile\n+++ b/Makefile\n@@ -967,7 +967,7 @@ endif\n CFLAGS = -g -O2 -Wall\n LDFLAGS =\n CC_LD_DYNPATH = -Wl,-rpath,\n-BASIC_CFLAGS = -I.\n+BASIC_CFLAGS = -I. -Ilib\n BASIC_LDFLAGS =\n \n # library flags\n@@ -992,7 +992,7 @@ SANITIZE_LEAK =\n SANITIZE_ADDRESS =\n \n # For the 'coccicheck' target\n-SPATCH_INCLUDE_FLAGS = --all-includes $(addprefix -I ,compat ewah refs sha256 trace2 win32 xdiff)\n+SPATCH_INCLUDE_FLAGS = --all-includes $(addprefix -I lib/,compat ewah refs sha256 trace2 win32 xdiff)\n SPATCH_FLAGS =\n SPATCH_TEST_FLAGS =\n \n@@ -1083,297 +1083,297 @@ FOUND_SOURCE_FILES := $(filter-out $(GENERATED_H),$(shell $(SOURCES_CMD)))\n FOUND_C_SOURCES = $(filter %.c,$(FOUND_SOURCE_FILES))\n FOUND_H_SOURCES = $(filter %.h,$(FOUND_SOURCE_FILES))\n \n-COCCI_SOURCES = $(filter-out $(THIRD_PARTY_SOURCES) reftable/%,$(FOUND_C_SOURCES))\n+COCCI_SOURCES = $(filter-out $(THIRD_PARTY_SOURCES) lib/reftable/%,$(FOUND_C_SOURCES))\n \n LIB_H = $(FOUND_H_SOURCES)\n \n-LIB_OBJS += abspath.o\n-LIB_OBJS += add-interactive.o\n-LIB_OBJS += add-patch.o\n-LIB_OBJS += advice.o\n-LIB_OBJS += alias.o\n-LIB_OBJS += alloc.o\n-LIB_OBJS += apply.o\n-LIB_OBJS += archive-tar.o\n-LIB_OBJS += archive-zip.o\n-LIB_OBJS += archive.o\n-LIB_OBJS += attr.o\n-LIB_OBJS += base85.o\n-LIB_OBJS += bisect.o\n-LIB_OBJS += blame.o\n-LIB_OBJS += blob.o\n-LIB_OBJS += bloom.o\n-LIB_OBJS += branch.o\n-LIB_OBJS += bundle-uri.o\n-LIB_OBJS += bundle.o\n-LIB_OBJS += cache-tree.o\n-LIB_OBJS += cbtree.o\n-LIB_OBJS += chdir-notify.o\n-LIB_OBJS += checkout.o\n-LIB_OBJS += chunk-format.o\n-LIB_OBJS += color.o\n-LIB_OBJS += column.o\n-LIB_OBJS += combine-diff.o\n-LIB_OBJS += commit-graph.o\n-LIB_OBJS += commit-reach.o\n-LIB_OBJS += commit.o\n-LIB_OBJS += common-exit.o\n-LIB_OBJS += common-init.o\n-LIB_OBJS += compat/nonblock.o\n-LIB_OBJS += compat/obstack.o\n-LIB_OBJS += compat/open.o\n-LIB_OBJS += compat/terminal.o\n-LIB_OBJS += compiler-tricks/not-constant.o\n-LIB_OBJS += config.o\n-LIB_OBJS += connect.o\n-LIB_OBJS += connected.o\n-LIB_OBJS += convert.o\n-LIB_OBJS += copy.o\n-LIB_OBJS += credential.o\n-LIB_OBJS += csum-file.o\n-LIB_OBJS += ctype.o\n-LIB_OBJS += date.o\n-LIB_OBJS += decorate.o\n-LIB_OBJS += delta-islands.o\n-LIB_OBJS += diagnose.o\n-LIB_OBJS += diff-delta.o\n-LIB_OBJS += diff-merges.o\n-LIB_OBJS += diff-lib.o\n-LIB_OBJS += diff-no-index.o\n-LIB_OBJS += diff.o\n-LIB_OBJS += diffcore-break.o\n-LIB_OBJS += diffcore-delta.o\n-LIB_OBJS += diffcore-order.o\n-LIB_OBJS += diffcore-pickaxe.o\n-LIB_OBJS += diffcore-rename.o\n-LIB_OBJS += diffcore-rotate.o\n-LIB_OBJS += dir-iterator.o\n-LIB_OBJS += dir.o\n-LIB_OBJS += editor.o\n-LIB_OBJS += entry.o\n-LIB_OBJS += environment.o\n-LIB_OBJS += ewah/bitmap.o\n-LIB_OBJS += ewah/ewah_bitmap.o\n-LIB_OBJS += ewah/ewah_io.o\n-LIB_OBJS += ewah/ewah_rlw.o\n-LIB_OBJS += exec-cmd.o\n-LIB_OBJS += fetch-negotiator.o\n-LIB_OBJS += fetch-pack.o\n-LIB_OBJS += fmt-merge-msg.o\n-LIB_OBJS += fsck.o\n-LIB_OBJS += fsmonitor.o\n-LIB_OBJS += fsmonitor-ipc.o\n-LIB_OBJS += fsmonitor-settings.o\n-LIB_OBJS += gettext.o\n-LIB_OBJS += git-zlib.o\n-LIB_OBJS += gpg-interface.o\n-LIB_OBJS += graph.o\n-LIB_OBJS += grep.o\n-LIB_OBJS += hash-lookup.o\n-LIB_OBJS += hash.o\n-LIB_OBJS += hashmap.o\n-LIB_OBJS += help.o\n-LIB_OBJS += hex.o\n-LIB_OBJS += hex-ll.o\n-LIB_OBJS += hook.o\n-LIB_OBJS += ident.o\n-LIB_OBJS += json-writer.o\n-LIB_OBJS += kwset.o\n-LIB_OBJS += levenshtein.o\n-LIB_OBJS += line-log.o\n-LIB_OBJS += line-range.o\n-LIB_OBJS += linear-assignment.o\n-LIB_OBJS += list-objects-filter-options.o\n-LIB_OBJS += list-objects-filter.o\n-LIB_OBJS += list-objects.o\n-LIB_OBJS += lockfile.o\n-LIB_OBJS += log-tree.o\n-LIB_OBJS += loose.o\n-LIB_OBJS += ls-refs.o\n-LIB_OBJS += mailinfo.o\n-LIB_OBJS += mailmap.o\n-LIB_OBJS += match-trees.o\n-LIB_OBJS += mem-pool.o\n-LIB_OBJS += merge-blobs.o\n-LIB_OBJS += merge-ll.o\n-LIB_OBJS += merge-ort.o\n-LIB_OBJS += merge-ort-wrappers.o\n-LIB_OBJS += merge.o\n-LIB_OBJS += midx.o\n-LIB_OBJS += midx-write.o\n-LIB_OBJS += name-hash.o\n-LIB_OBJS += negotiator/default.o\n-LIB_OBJS += negotiator/noop.o\n-LIB_OBJS += negotiator/skipping.o\n-LIB_OBJS += notes-cache.o\n-LIB_OBJS += notes-merge.o\n-LIB_OBJS += notes-utils.o\n-LIB_OBJS += notes.o\n-LIB_OBJS += object-file-convert.o\n-LIB_OBJS += object-file.o\n-LIB_OBJS += object-name.o\n-LIB_OBJS += object.o\n-LIB_OBJS += odb.o\n-LIB_OBJS += odb/source.o\n-LIB_OBJS += odb/source-files.o\n-LIB_OBJS += odb/source-inmemory.o\n-LIB_OBJS += odb/source-loose.o\n-LIB_OBJS += odb/source-packed.o\n-LIB_OBJS += odb/streaming.o\n-LIB_OBJS += odb/transaction.o\n-LIB_OBJS += oid-array.o\n-LIB_OBJS += oidmap.o\n-LIB_OBJS += oidset.o\n-LIB_OBJS += oidtree.o\n-LIB_OBJS += pack-bitmap-write.o\n-LIB_OBJS += pack-bitmap.o\n-LIB_OBJS += pack-check.o\n-LIB_OBJS += pack-mtimes.o\n-LIB_OBJS += pack-objects.o\n-LIB_OBJS += pack-refs.o\n-LIB_OBJS += pack-revindex.o\n-LIB_OBJS += pack-write.o\n-LIB_OBJS += packfile.o\n-LIB_OBJS += packfile-list.o\n-LIB_OBJS += pager.o\n-LIB_OBJS += parallel-checkout.o\n-LIB_OBJS += parse.o\n-LIB_OBJS += parse-options-cb.o\n-LIB_OBJS += parse-options.o\n-LIB_OBJS += patch-delta.o\n-LIB_OBJS += patch-ids.o\n-LIB_OBJS += path.o\n-LIB_OBJS += path-walk.o\n-LIB_OBJS += pathspec.o\n-LIB_OBJS += pkt-line.o\n-LIB_OBJS += preload-index.o\n-LIB_OBJS += pretty.o\n-LIB_OBJS += prio-queue.o\n-LIB_OBJS += progress.o\n-LIB_OBJS += promisor-remote.o\n-LIB_OBJS += prompt.o\n-LIB_OBJS += protocol.o\n-LIB_OBJS += protocol-caps.o\n-LIB_OBJS += prune-packed.o\n-LIB_OBJS += pseudo-merge.o\n-LIB_OBJS += quote.o\n-LIB_OBJS += range-diff.o\n-LIB_OBJS += reachable.o\n-LIB_OBJS += read-cache.o\n-LIB_OBJS += rebase-interactive.o\n-LIB_OBJS += rebase.o\n-LIB_OBJS += ref-filter.o\n-LIB_OBJS += reflog-walk.o\n-LIB_OBJS += reflog.o\n-LIB_OBJS += refs.o\n-LIB_OBJS += refs/debug.o\n-LIB_OBJS += refs/files-backend.o\n-LIB_OBJS += refs/reftable-backend.o\n-LIB_OBJS += refs/iterator.o\n-LIB_OBJS += refs/packed-backend.o\n-LIB_OBJS += refs/ref-cache.o\n-LIB_OBJS += refspec.o\n-LIB_OBJS += reftable/basics.o\n-LIB_OBJS += reftable/block.o\n-LIB_OBJS += reftable/blocksource.o\n-LIB_OBJS += reftable/error.o\n-LIB_OBJS += reftable/fsck.o\n-LIB_OBJS += reftable/iter.o\n-LIB_OBJS += reftable/merged.o\n-LIB_OBJS += reftable/pq.o\n-LIB_OBJS += reftable/record.o\n-LIB_OBJS += reftable/stack.o\n-LIB_OBJS += reftable/system.o\n-LIB_OBJS += reftable/table.o\n-LIB_OBJS += reftable/tree.o\n-LIB_OBJS += reftable/writer.o\n-LIB_OBJS += remote.o\n-LIB_OBJS += repack.o\n-LIB_OBJS += repack-cruft.o\n-LIB_OBJS += repack-filtered.o\n-LIB_OBJS += repack-geometry.o\n-LIB_OBJS += repack-midx.o\n-LIB_OBJS += repack-promisor.o\n-LIB_OBJS += replace-object.o\n-LIB_OBJS += replay.o\n-LIB_OBJS += repo-settings.o\n-LIB_OBJS += repository.o\n-LIB_OBJS += rerere.o\n-LIB_OBJS += reset.o\n-LIB_OBJS += resolve-undo.o\n-LIB_OBJS += revision.o\n-LIB_OBJS += run-command.o\n-LIB_OBJS += send-pack.o\n-LIB_OBJS += sequencer.o\n-LIB_OBJS += serve.o\n-LIB_OBJS += server-info.o\n-LIB_OBJS += setup.o\n-LIB_OBJS += shallow.o\n-LIB_OBJS += sideband.o\n-LIB_OBJS += sigchain.o\n-LIB_OBJS += sparse-index.o\n-LIB_OBJS += split-index.o\n-LIB_OBJS += stable-qsort.o\n-LIB_OBJS += statinfo.o\n-LIB_OBJS += strbuf.o\n-LIB_OBJS += string-list.o\n-LIB_OBJS += strmap.o\n-LIB_OBJS += strvec.o\n-LIB_OBJS += sub-process.o\n-LIB_OBJS += submodule-config.o\n-LIB_OBJS += submodule.o\n-LIB_OBJS += symlinks.o\n-LIB_OBJS += tag.o\n-LIB_OBJS += tempfile.o\n-LIB_OBJS += thread-utils.o\n-LIB_OBJS += tmp-objdir.o\n-LIB_OBJS += trace.o\n-LIB_OBJS += trace2.o\n-LIB_OBJS += trace2/tr2_cfg.o\n-LIB_OBJS += trace2/tr2_cmd_name.o\n-LIB_OBJS += trace2/tr2_ctr.o\n-LIB_OBJS += trace2/tr2_dst.o\n-LIB_OBJS += trace2/tr2_sid.o\n-LIB_OBJS += trace2/tr2_sysenv.o\n-LIB_OBJS += trace2/tr2_tbuf.o\n-LIB_OBJS += trace2/tr2_tgt_event.o\n-LIB_OBJS += trace2/tr2_tgt_normal.o\n-LIB_OBJS += trace2/tr2_tgt_perf.o\n-LIB_OBJS += trace2/tr2_tls.o\n-LIB_OBJS += trace2/tr2_tmr.o\n-LIB_OBJS += trailer.o\n-LIB_OBJS += transport-helper.o\n-LIB_OBJS += transport.o\n-LIB_OBJS += tree-diff.o\n-LIB_OBJS += tree-walk.o\n-LIB_OBJS += tree.o\n-LIB_OBJS += unpack-trees.o\n-LIB_OBJS += upload-pack.o\n-LIB_OBJS += url.o\n-LIB_OBJS += urlmatch.o\n-LIB_OBJS += usage.o\n-LIB_OBJS += userdiff.o\n-LIB_OBJS += utf8.o\n+LIB_OBJS += lib/abspath.o\n+LIB_OBJS += lib/add-interactive.o\n+LIB_OBJS += lib/add-patch.o\n+LIB_OBJS += lib/advice.o\n+LIB_OBJS += lib/alias.o\n+LIB_OBJS += lib/alloc.o\n+LIB_OBJS += lib/apply.o\n+LIB_OBJS += lib/archive-tar.o\n+LIB_OBJS += lib/archive-zip.o\n+LIB_OBJS += lib/archive.o\n+LIB_OBJS += lib/attr.o\n+LIB_OBJS += lib/base85.o\n+LIB_OBJS += lib/bisect.o\n+LIB_OBJS += lib/blame.o\n+LIB_OBJS += lib/blob.o\n+LIB_OBJS += lib/bloom.o\n+LIB_OBJS += lib/branch.o\n+LIB_OBJS += lib/bundle-uri.o\n+LIB_OBJS += lib/bundle.o\n+LIB_OBJS += lib/cache-tree.o\n+LIB_OBJS += lib/cbtree.o\n+LIB_OBJS += lib/chdir-notify.o\n+LIB_OBJS += lib/checkout.o\n+LIB_OBJS += lib/chunk-format.o\n+LIB_OBJS += lib/color.o\n+LIB_OBJS += lib/column.o\n+LIB_OBJS += lib/combine-diff.o\n+LIB_OBJS += lib/commit-graph.o\n+LIB_OBJS += lib/commit-reach.o\n+LIB_OBJS += lib/commit.o\n+LIB_OBJS += lib/common-exit.o\n+LIB_OBJS += lib/common-init.o\n+LIB_OBJS += lib/compat/nonblock.o\n+LIB_OBJS += lib/compat/obstack.o\n+LIB_OBJS += lib/compat/open.o\n+LIB_OBJS += lib/compat/terminal.o\n+LIB_OBJS += lib/compiler-tricks/not-constant.o\n+LIB_OBJS += lib/config.o\n+LIB_OBJS += lib/connect.o\n+LIB_OBJS += lib/connected.o\n+LIB_OBJS += lib/convert.o\n+LIB_OBJS += lib/copy.o\n+LIB_OBJS += lib/credential.o\n+LIB_OBJS += lib/csum-file.o\n+LIB_OBJS += lib/ctype.o\n+LIB_OBJS += lib/date.o\n+LIB_OBJS += lib/decorate.o\n+LIB_OBJS += lib/delta-islands.o\n+LIB_OBJS += lib/diagnose.o\n+LIB_OBJS += lib/diff-delta.o\n+LIB_OBJS += lib/diff-merges.o\n+LIB_OBJS += lib/diff-lib.o\n+LIB_OBJS += lib/diff-no-index.o\n+LIB_OBJS += lib/diff.o\n+LIB_OBJS += lib/diffcore-break.o\n+LIB_OBJS += lib/diffcore-delta.o\n+LIB_OBJS += lib/diffcore-order.o\n+LIB_OBJS += lib/diffcore-pickaxe.o\n+LIB_OBJS += lib/diffcore-rename.o\n+LIB_OBJS += lib/diffcore-rotate.o\n+LIB_OBJS += lib/dir-iterator.o\n+LIB_OBJS += lib/dir.o\n+LIB_OBJS += lib/editor.o\n+LIB_OBJS += lib/entry.o\n+LIB_OBJS += lib/environment.o\n+LIB_OBJS += lib/ewah/bitmap.o\n+LIB_OBJS += lib/ewah/ewah_bitmap.o\n+LIB_OBJS += lib/ewah/ewah_io.o\n+LIB_OBJS += lib/ewah/ewah_rlw.o\n+LIB_OBJS += lib/exec-cmd.o\n+LIB_OBJS += lib/fetch-negotiator.o\n+LIB_OBJS += lib/fetch-pack.o\n+LIB_OBJS += lib/fmt-merge-msg.o\n+LIB_OBJS += lib/fsck.o\n+LIB_OBJS += lib/fsmonitor.o\n+LIB_OBJS += lib/fsmonitor-ipc.o\n+LIB_OBJS += lib/fsmonitor-settings.o\n+LIB_OBJS += lib/gettext.o\n+LIB_OBJS += lib/git-zlib.o\n+LIB_OBJS += lib/gpg-interface.o\n+LIB_OBJS += lib/graph.o\n+LIB_OBJS += lib/grep.o\n+LIB_OBJS += lib/hash-lookup.o\n+LIB_OBJS += lib/hash.o\n+LIB_OBJS += lib/hashmap.o\n+LIB_OBJS += lib/help.o\n+LIB_OBJS += lib/hex.o\n+LIB_OBJS += lib/hex-ll.o\n+LIB_OBJS += lib/hook.o\n+LIB_OBJS += lib/ident.o\n+LIB_OBJS += lib/json-writer.o\n+LIB_OBJS += lib/kwset.o\n+LIB_OBJS += lib/levenshtein.o\n+LIB_OBJS += lib/line-log.o\n+LIB_OBJS += lib/line-range.o\n+LIB_OBJS += lib/linear-assignment.o\n+LIB_OBJS += lib/list-objects-filter-options.o\n+LIB_OBJS += lib/list-objects-filter.o\n+LIB_OBJS += lib/list-objects.o\n+LIB_OBJS += lib/lockfile.o\n+LIB_OBJS += lib/log-tree.o\n+LIB_OBJS += lib/loose.o\n+LIB_OBJS += lib/ls-refs.o\n+LIB_OBJS += lib/mailinfo.o\n+LIB_OBJS += lib/mailmap.o\n+LIB_OBJS += lib/match-trees.o\n+LIB_OBJS += lib/mem-pool.o\n+LIB_OBJS += lib/merge-blobs.o\n+LIB_OBJS += lib/merge-ll.o\n+LIB_OBJS += lib/merge-ort.o\n+LIB_OBJS += lib/merge-ort-wrappers.o\n+LIB_OBJS += lib/merge.o\n+LIB_OBJS += lib/midx.o\n+LIB_OBJS += lib/midx-write.o\n+LIB_OBJS += lib/name-hash.o\n+LIB_OBJS += lib/negotiator/default.o\n+LIB_OBJS += lib/negotiator/noop.o\n+LIB_OBJS += lib/negotiator/skipping.o\n+LIB_OBJS += lib/notes-cache.o\n+LIB_OBJS += lib/notes-merge.o\n+LIB_OBJS += lib/notes-utils.o\n+LIB_OBJS += lib/notes.o\n+LIB_OBJS += lib/object-file-convert.o\n+LIB_OBJS += lib/object-file.o\n+LIB_OBJS += lib/object-name.o\n+LIB_OBJS += lib/object.o\n+LIB_OBJS += lib/odb.o\n+LIB_OBJS += lib/odb/source.o\n+LIB_OBJS += lib/odb/source-files.o\n+LIB_OBJS += lib/odb/source-inmemory.o\n+LIB_OBJS += lib/odb/source-loose.o\n+LIB_OBJS += lib/odb/source-packed.o\n+LIB_OBJS += lib/odb/streaming.o\n+LIB_OBJS += lib/odb/transaction.o\n+LIB_OBJS += lib/oid-array.o\n+LIB_OBJS += lib/oidmap.o\n+LIB_OBJS += lib/oidset.o\n+LIB_OBJS += lib/oidtree.o\n+LIB_OBJS += lib/pack-bitmap-write.o\n+LIB_OBJS += lib/pack-bitmap.o\n+LIB_OBJS += lib/pack-check.o\n+LIB_OBJS += lib/pack-mtimes.o\n+LIB_OBJS += lib/pack-objects.o\n+LIB_OBJS += lib/pack-refs.o\n+LIB_OBJS += lib/pack-revindex.o\n+LIB_OBJS += lib/pack-write.o\n+LIB_OBJS += lib/packfile.o\n+LIB_OBJS += lib/packfile-list.o\n+LIB_OBJS += lib/pager.o\n+LIB_OBJS += lib/parallel-checkout.o\n+LIB_OBJS += lib/parse.o\n+LIB_OBJS += lib/parse-options-cb.o\n+LIB_OBJS += lib/parse-options.o\n+LIB_OBJS += lib/patch-delta.o\n+LIB_OBJS += lib/patch-ids.o\n+LIB_OBJS += lib/path.o\n+LIB_OBJS += lib/path-walk.o\n+LIB_OBJS += lib/pathspec.o\n+LIB_OBJS += lib/pkt-line.o\n+LIB_OBJS += lib/preload-index.o\n+LIB_OBJS += lib/pretty.o\n+LIB_OBJS += lib/prio-queue.o\n+LIB_OBJS += lib/progress.o\n+LIB_OBJS += lib/promisor-remote.o\n+LIB_OBJS += lib/prompt.o\n+LIB_OBJS += lib/protocol.o\n+LIB_OBJS += lib/protocol-caps.o\n+LIB_OBJS += lib/prune-packed.o\n+LIB_OBJS += lib/pseudo-merge.o\n+LIB_OBJS += lib/quote.o\n+LIB_OBJS += lib/range-diff.o\n+LIB_OBJS += lib/reachable.o\n+LIB_OBJS += lib/read-cache.o\n+LIB_OBJS += lib/rebase-interactive.o\n+LIB_OBJS += lib/rebase.o\n+LIB_OBJS += lib/ref-filter.o\n+LIB_OBJS += lib/reflog-walk.o\n+LIB_OBJS += lib/reflog.o\n+LIB_OBJS += lib/refs.o\n+LIB_OBJS += lib/refs/debug.o\n+LIB_OBJS += lib/refs/files-backend.o\n+LIB_OBJS += lib/refs/reftable-backend.o\n+LIB_OBJS += lib/refs/iterator.o\n+LIB_OBJS += lib/refs/packed-backend.o\n+LIB_OBJS += lib/refs/ref-cache.o\n+LIB_OBJS += lib/refspec.o\n+LIB_OBJS += lib/reftable/basics.o\n+LIB_OBJS += lib/reftable/block.o\n+LIB_OBJS += lib/reftable/blocksource.o\n+LIB_OBJS += lib/reftable/error.o\n+LIB_OBJS += lib/reftable/fsck.o\n+LIB_OBJS += lib/reftable/iter.o\n+LIB_OBJS += lib/reftable/merged.o\n+LIB_OBJS += lib/reftable/pq.o\n+LIB_OBJS += lib/reftable/record.o\n+LIB_OBJS += lib/reftable/stack.o\n+LIB_OBJS += lib/reftable/system.o\n+LIB_OBJS += lib/reftable/table.o\n+LIB_OBJS += lib/reftable/tree.o\n+LIB_OBJS += lib/reftable/writer.o\n+LIB_OBJS += lib/remote.o\n+LIB_OBJS += lib/repack.o\n+LIB_OBJS += lib/repack-cruft.o\n+LIB_OBJS += lib/repack-filtered.o\n+LIB_OBJS += lib/repack-geometry.o\n+LIB_OBJS += lib/repack-midx.o\n+LIB_OBJS += lib/repack-promisor.o\n+LIB_OBJS += lib/replace-object.o\n+LIB_OBJS += lib/replay.o\n+LIB_OBJS += lib/repo-settings.o\n+LIB_OBJS += lib/repository.o\n+LIB_OBJS += lib/rerere.o\n+LIB_OBJS += lib/reset.o\n+LIB_OBJS += lib/resolve-undo.o\n+LIB_OBJS += lib/revision.o\n+LIB_OBJS += lib/run-command.o\n+LIB_OBJS += lib/send-pack.o\n+LIB_OBJS += lib/sequencer.o\n+LIB_OBJS += lib/serve.o\n+LIB_OBJS += lib/server-info.o\n+LIB_OBJS += lib/setup.o\n+LIB_OBJS += lib/shallow.o\n+LIB_OBJS += lib/sideband.o\n+LIB_OBJS += lib/sigchain.o\n+LIB_OBJS += lib/sparse-index.o\n+LIB_OBJS += lib/split-index.o\n+LIB_OBJS += lib/stable-qsort.o\n+LIB_OBJS += lib/statinfo.o\n+LIB_OBJS += lib/strbuf.o\n+LIB_OBJS += lib/string-list.o\n+LIB_OBJS += lib/strmap.o\n+LIB_OBJS += lib/strvec.o\n+LIB_OBJS += lib/sub-process.o\n+LIB_OBJS += lib/submodule-config.o\n+LIB_OBJS += lib/submodule.o\n+LIB_OBJS += lib/symlinks.o\n+LIB_OBJS += lib/tag.o\n+LIB_OBJS += lib/tempfile.o\n+LIB_OBJS += lib/thread-utils.o\n+LIB_OBJS += lib/tmp-objdir.o\n+LIB_OBJS += lib/trace.o\n+LIB_OBJS += lib/trace2.o\n+LIB_OBJS += lib/trace2/tr2_cfg.o\n+LIB_OBJS += lib/trace2/tr2_cmd_name.o\n+LIB_OBJS += lib/trace2/tr2_ctr.o\n+LIB_OBJS += lib/trace2/tr2_dst.o\n+LIB_OBJS += lib/trace2/tr2_sid.o\n+LIB_OBJS += lib/trace2/tr2_sysenv.o\n+LIB_OBJS += lib/trace2/tr2_tbuf.o\n+LIB_OBJS += lib/trace2/tr2_tgt_event.o\n+LIB_OBJS += lib/trace2/tr2_tgt_normal.o\n+LIB_OBJS += lib/trace2/tr2_tgt_perf.o\n+LIB_OBJS += lib/trace2/tr2_tls.o\n+LIB_OBJS += lib/trace2/tr2_tmr.o\n+LIB_OBJS += lib/trailer.o\n+LIB_OBJS += lib/transport-helper.o\n+LIB_OBJS += lib/transport.o\n+LIB_OBJS += lib/tree-diff.o\n+LIB_OBJS += lib/tree-walk.o\n+LIB_OBJS += lib/tree.o\n+LIB_OBJS += lib/unpack-trees.o\n+LIB_OBJS += lib/upload-pack.o\n+LIB_OBJS += lib/url.o\n+LIB_OBJS += lib/urlmatch.o\n+LIB_OBJS += lib/usage.o\n+LIB_OBJS += lib/userdiff.o\n+LIB_OBJS += lib/utf8.o\n ifdef NO_RUST\n-LIB_OBJS += varint.o\n-endif\n-LIB_OBJS += version.o\n-LIB_OBJS += versioncmp.o\n-LIB_OBJS += walker.o\n-LIB_OBJS += wildmatch.o\n-LIB_OBJS += worktree.o\n-LIB_OBJS += wrapper.o\n-LIB_OBJS += write-or-die.o\n-LIB_OBJS += ws.o\n-LIB_OBJS += wt-status.o\n-LIB_OBJS += xdiff-interface.o\n-LIB_OBJS += xdiff/xdiffi.o\n-LIB_OBJS += xdiff/xemit.o\n-LIB_OBJS += xdiff/xhistogram.o\n-LIB_OBJS += xdiff/xmerge.o\n-LIB_OBJS += xdiff/xpatience.o\n-LIB_OBJS += xdiff/xprepare.o\n-LIB_OBJS += xdiff/xutils.o\n+LIB_OBJS += lib/varint.o\n+endif\n+LIB_OBJS += lib/version.o\n+LIB_OBJS += lib/versioncmp.o\n+LIB_OBJS += lib/walker.o\n+LIB_OBJS += lib/wildmatch.o\n+LIB_OBJS += lib/worktree.o\n+LIB_OBJS += lib/wrapper.o\n+LIB_OBJS += lib/write-or-die.o\n+LIB_OBJS += lib/ws.o\n+LIB_OBJS += lib/wt-status.o\n+LIB_OBJS += lib/xdiff-interface.o\n+LIB_OBJS += lib/xdiff/xdiffi.o\n+LIB_OBJS += lib/xdiff/xemit.o\n+LIB_OBJS += lib/xdiff/xhistogram.o\n+LIB_OBJS += lib/xdiff/xmerge.o\n+LIB_OBJS += lib/xdiff/xpatience.o\n+LIB_OBJS += lib/xdiff/xprepare.o\n+LIB_OBJS += lib/xdiff/xutils.o\n \n BUILTIN_OBJS += builtin/add.o\n BUILTIN_OBJS += builtin/am.o\n@@ -1513,13 +1513,13 @@ BUILTIN_OBJS += builtin/write-tree.o\n # files which are taken from some third-party source where we want to be\n # less strict about issues such as coding style so we don't diverge from\n # upstream unnecessarily (making merging in future changes easier).\n-THIRD_PARTY_SOURCES += compat/inet_ntop.c\n-THIRD_PARTY_SOURCES += compat/inet_pton.c\n-THIRD_PARTY_SOURCES += compat/obstack.%\n-THIRD_PARTY_SOURCES += compat/poll/%\n-THIRD_PARTY_SOURCES += compat/regex/%\n-THIRD_PARTY_SOURCES += sha1collisiondetection/%\n-THIRD_PARTY_SOURCES += sha1dc/%\n+THIRD_PARTY_SOURCES += lib/compat/inet_ntop.c\n+THIRD_PARTY_SOURCES += lib/compat/inet_pton.c\n+THIRD_PARTY_SOURCES += lib/compat/obstack.%\n+THIRD_PARTY_SOURCES += lib/compat/poll/%\n+THIRD_PARTY_SOURCES += lib/compat/regex/%\n+THIRD_PARTY_SOURCES += lib/sha1collisiondetection/%\n+THIRD_PARTY_SOURCES += lib/sha1dc/%\n THIRD_PARTY_SOURCES += $(UNIT_TEST_DIR)/clar/%\n THIRD_PARTY_SOURCES += $(UNIT_TEST_DIR)/clar/clar/%\n \n@@ -1750,7 +1750,7 @@ endif\n \n ifdef NO_LIBGEN_H\n \tCOMPAT_CFLAGS += -DNO_LIBGEN_H\n-\tCOMPAT_OBJS += compat/basename.o\n+\tCOMPAT_OBJS += lib/compat/basename.o\n endif\n \n ifdef USE_LIBPCRE1\n@@ -1816,7 +1816,7 @@ else\n         endif\n         ifdef USE_CURL_FOR_IMAP_SEND\n \t\tBASIC_CFLAGS += -DUSE_CURL_FOR_IMAP_SEND\n-\t\tIMAP_SEND_BUILDDEPS = http.o\n+\t\tIMAP_SEND_BUILDDEPS = lib/http.o\n \t\tIMAP_SEND_LDFLAGS += $(CURL_LIBCURL)\n         endif\n         ifndef NO_EXPAT\n@@ -1937,11 +1937,11 @@ ifdef NO_NSEC\n endif\n ifdef SNPRINTF_RETURNS_BOGUS\n \tCOMPAT_CFLAGS += -DSNPRINTF_RETURNS_BOGUS\n-\tCOMPAT_OBJS += compat/snprintf.o\n+\tCOMPAT_OBJS += lib/compat/snprintf.o\n endif\n ifdef FREAD_READS_DIRECTORIES\n \tCOMPAT_CFLAGS += -DFREAD_READS_DIRECTORIES\n-\tCOMPAT_OBJS += compat/fopen.o\n+\tCOMPAT_OBJS += lib/compat/fopen.o\n endif\n ifdef OPEN_RETURNS_EINTR\n \tCOMPAT_CFLAGS += -DOPEN_RETURNS_EINTR\n@@ -1956,38 +1956,38 @@ endif\n ifdef NO_POLL\n \tNO_POLL_H = YesPlease\n \tNO_SYS_POLL_H = YesPlease\n-\tCOMPAT_CFLAGS += -DNO_POLL -Icompat/poll\n-\tCOMPAT_OBJS += compat/poll/poll.o\n+\tCOMPAT_CFLAGS += -DNO_POLL -Ilib/compat/poll\n+\tCOMPAT_OBJS += lib/compat/poll/poll.o\n endif\n ifdef NO_STRCASESTR\n \tCOMPAT_CFLAGS += -DNO_STRCASESTR\n-\tCOMPAT_OBJS += compat/strcasestr.o\n+\tCOMPAT_OBJS += lib/compat/strcasestr.o\n endif\n ifdef NO_STRLCPY\n \tCOMPAT_CFLAGS += -DNO_STRLCPY\n-\tCOMPAT_OBJS += compat/strlcpy.o\n+\tCOMPAT_OBJS += lib/compat/strlcpy.o\n endif\n ifdef NO_STRTOUMAX\n \tCOMPAT_CFLAGS += -DNO_STRTOUMAX\n-\tCOMPAT_OBJS += compat/strtoumax.o compat/strtoimax.o\n+\tCOMPAT_OBJS += lib/compat/strtoumax.o lib/compat/strtoimax.o\n endif\n ifdef NO_STRTOULL\n \tCOMPAT_CFLAGS += -DNO_STRTOULL\n endif\n ifdef NO_SETENV\n \tCOMPAT_CFLAGS += -DNO_SETENV\n-\tCOMPAT_OBJS += compat/setenv.o\n+\tCOMPAT_OBJS += lib/compat/setenv.o\n endif\n ifdef NO_MKDTEMP\n \tCOMPAT_CFLAGS += -DNO_MKDTEMP\n endif\n ifdef MKDIR_WO_TRAILING_SLASH\n \tCOMPAT_CFLAGS += -DMKDIR_WO_TRAILING_SLASH\n-\tCOMPAT_OBJS += compat/mkdir.o\n+\tCOMPAT_OBJS += lib/compat/mkdir.o\n endif\n ifdef NO_UNSETENV\n \tCOMPAT_CFLAGS += -DNO_UNSETENV\n-\tCOMPAT_OBJS += compat/unsetenv.o\n+\tCOMPAT_OBJS += lib/compat/unsetenv.o\n endif\n ifdef NO_SYS_SELECT_H\n \tBASIC_CFLAGS += -DNO_SYS_SELECT_H\n@@ -2009,11 +2009,11 @@ ifdef NO_INITGROUPS\n endif\n ifdef NO_MMAP\n \tCOMPAT_CFLAGS += -DNO_MMAP\n-\tCOMPAT_OBJS += compat/mmap.o\n+\tCOMPAT_OBJS += lib/compat/mmap.o\n else\n         ifdef USE_WIN32_MMAP\n \t\tCOMPAT_CFLAGS += -DUSE_WIN32_MMAP\n-\t\tCOMPAT_OBJS += compat/win32mmap.o\n+\t\tCOMPAT_OBJS += lib/compat/win32mmap.o\n         endif\n endif\n ifdef MMAP_PREVENTS_DELETE\n@@ -2031,7 +2031,7 @@ ifdef NO_SETITIMER\n endif\n ifdef NO_PREAD\n \tCOMPAT_CFLAGS += -DNO_PREAD\n-\tCOMPAT_OBJS += compat/pread.o\n+\tCOMPAT_OBJS += lib/compat/pread.o\n endif\n ifdef NO_FAST_WORKING_DIRECTORY\n \tBASIC_CFLAGS += -DNO_FAST_WORKING_DIRECTORY\n@@ -2041,7 +2041,7 @@ ifdef NO_TRUSTABLE_FILEMODE\n endif\n ifdef NEEDS_MODE_TRANSLATION\n \tCOMPAT_CFLAGS += -DNEEDS_MODE_TRANSLATION\n-\tCOMPAT_OBJS += compat/stat.o\n+\tCOMPAT_OBJS += lib/compat/stat.o\n endif\n ifdef NO_IPV6\n \tBASIC_CFLAGS += -DNO_IPV6\n@@ -2057,18 +2057,18 @@ else\n endif\n endif\n ifdef NO_INET_NTOP\n-\tLIB_OBJS += compat/inet_ntop.o\n+\tLIB_OBJS += lib/compat/inet_ntop.o\n \tBASIC_CFLAGS += -DNO_INET_NTOP\n endif\n ifdef NO_INET_PTON\n-\tLIB_OBJS += compat/inet_pton.o\n+\tLIB_OBJS += lib/compat/inet_pton.o\n \tBASIC_CFLAGS += -DNO_INET_PTON\n endif\n ifdef NO_UNIX_SOCKETS\n \tBASIC_CFLAGS += -DNO_UNIX_SOCKETS\n else\n-\tLIB_OBJS += unix-socket.o\n-\tLIB_OBJS += unix-stream-server.o\n+\tLIB_OBJS += lib/unix-socket.o\n+\tLIB_OBJS += lib/unix-stream-server.o\n endif\n \n # Simple IPC requires threads and platform-specific IPC support.\n@@ -2084,14 +2084,14 @@ endif\n #\n ifdef USE_WIN32_IPC\n \tBASIC_CFLAGS += -DSUPPORTS_SIMPLE_IPC\n-\tLIB_OBJS += compat/simple-ipc/ipc-shared.o\n-\tLIB_OBJS += compat/simple-ipc/ipc-win32.o\n+\tLIB_OBJS += lib/compat/simple-ipc/ipc-shared.o\n+\tLIB_OBJS += lib/compat/simple-ipc/ipc-win32.o\n else\n ifndef NO_PTHREADS\n ifndef NO_UNIX_SOCKETS\n \tBASIC_CFLAGS += -DSUPPORTS_SIMPLE_IPC\n-\tLIB_OBJS += compat/simple-ipc/ipc-shared.o\n-\tLIB_OBJS += compat/simple-ipc/ipc-unix-socket.o\n+\tLIB_OBJS += lib/compat/simple-ipc/ipc-shared.o\n+\tLIB_OBJS += lib/compat/simple-ipc/ipc-unix-socket.o\n endif\n endif\n endif\n@@ -2126,7 +2126,7 @@ ifdef OPENSSL_SHA1\n \tBASIC_CFLAGS += -DSHA1_OPENSSL\n else\n ifdef BLK_SHA1\n-\tLIB_OBJS += block-sha1/sha1.o\n+\tLIB_OBJS += lib/block-sha1/sha1.o\n \tBASIC_CFLAGS += -DSHA1_BLK\n else\n ifdef APPLE_COMMON_CRYPTO_SHA1\n@@ -2134,7 +2134,7 @@ ifdef APPLE_COMMON_CRYPTO_SHA1\n \tBASIC_CFLAGS += -DSHA1_APPLE\n else\n \tBASIC_CFLAGS += -DSHA1_DC\n-\tLIB_OBJS += sha1dc_git.o\n+\tLIB_OBJS += lib/sha1dc_git.o\n ifdef DC_SHA1_EXTERNAL\n         ifdef DC_SHA1_SUBMODULE\n                 ifneq ($(DC_SHA1_SUBMODULE),auto)\n@@ -2145,12 +2145,12 @@ $(error Only set DC_SHA1_EXTERNAL or DC_SHA1_SUBMODULE, not both)\n \tEXTLIBS += -lsha1detectcoll\n else\n ifdef DC_SHA1_SUBMODULE\n-\tLIB_OBJS += sha1collisiondetection/lib/sha1.o\n-\tLIB_OBJS += sha1collisiondetection/lib/ubc_check.o\n+\tLIB_OBJS += lib/sha1collisiondetection/lib/sha1.o\n+\tLIB_OBJS += lib/sha1collisiondetection/lib/ubc_check.o\n \tBASIC_CFLAGS += -DDC_SHA1_SUBMODULE\n else\n-\tLIB_OBJS += sha1dc/sha1.o\n-\tLIB_OBJS += sha1dc/ubc_check.o\n+\tLIB_OBJS += lib/sha1dc/sha1.o\n+\tLIB_OBJS += lib/sha1dc/ubc_check.o\n endif\n \tBASIC_CFLAGS += \\\n \t\t-DSHA1DC_NO_STANDARD_INCLUDES \\\n@@ -2170,7 +2170,7 @@ endif\n else\n ifdef BLK_SHA1_UNSAFE\n ifndef BLK_SHA1\n-\tLIB_OBJS += block-sha1/sha1.o\n+\tLIB_OBJS += lib/block-sha1/sha1.o\n \tBASIC_CFLAGS += -DSHA1_BLK_UNSAFE\n endif\n else\n@@ -2195,23 +2195,23 @@ ifdef GCRYPT_SHA256\n \tBASIC_CFLAGS += -DSHA256_GCRYPT\n \tEXTLIBS += -lgcrypt\n else\n-\tLIB_OBJS += sha256/block/sha256.o\n+\tLIB_OBJS += lib/sha256/block/sha256.o\n \tBASIC_CFLAGS += -DSHA256_BLK\n endif\n endif\n endif\n \n ifdef SHA1_MAX_BLOCK_SIZE\n-\tLIB_OBJS += compat/sha1-chunked.o\n+\tLIB_OBJS += lib/compat/sha1-chunked.o\n \tBASIC_CFLAGS += -DSHA1_MAX_BLOCK_SIZE=\"$(SHA1_MAX_BLOCK_SIZE)\"\n endif\n ifdef NO_HSTRERROR\n \tCOMPAT_CFLAGS += -DNO_HSTRERROR\n-\tCOMPAT_OBJS += compat/hstrerror.o\n+\tCOMPAT_OBJS += lib/compat/hstrerror.o\n endif\n ifdef NO_MEMMEM\n \tCOMPAT_CFLAGS += -DNO_MEMMEM\n-\tCOMPAT_OBJS += compat/memmem.o\n+\tCOMPAT_OBJS += lib/compat/memmem.o\n endif\n ifdef NO_GETPAGESIZE\n \tCOMPAT_CFLAGS += -DNO_GETPAGESIZE\n@@ -2222,7 +2222,7 @@ endif\n ifdef HAVE_ISO_QSORT_S\n \tCOMPAT_CFLAGS += -DHAVE_ISO_QSORT_S\n else\n-\tCOMPAT_OBJS += compat/qsort_s.o\n+\tCOMPAT_OBJS += lib/compat/qsort_s.o\n endif\n ifdef RUNTIME_PREFIX\n \tCOMPAT_CFLAGS += -DRUNTIME_PREFIX\n@@ -2259,12 +2259,12 @@ ifdef UNRELIABLE_FSTAT\n \tBASIC_CFLAGS += -DUNRELIABLE_FSTAT\n endif\n ifdef NO_REGEX\n-\tCOMPAT_CFLAGS += -Icompat/regex\n-\tCOMPAT_OBJS += compat/regex/regex.o\n+\tCOMPAT_CFLAGS += -Ilib/compat/regex\n+\tCOMPAT_OBJS += lib/compat/regex/regex.o\n else\n ifdef USE_ENHANCED_BASIC_REGULAR_EXPRESSIONS\n \tCOMPAT_CFLAGS += -DUSE_ENHANCED_BASIC_REGULAR_EXPRESSIONS\n-\tCOMPAT_OBJS += compat/regcomp_enhanced.o\n+\tCOMPAT_OBJS += lib/compat/regcomp_enhanced.o\n endif\n endif\n ifdef NATIVE_CRLF\n@@ -2273,7 +2273,7 @@ endif\n \n ifdef OVERRIDE_STRDUP\n \tCOMPAT_CFLAGS += -DOVERRIDE_STRDUP\n-\tCOMPAT_OBJS += compat/strdup.o\n+\tCOMPAT_OBJS += lib/compat/strdup.o\n endif\n \n ifdef GIT_TEST_CMP_USE_COPIED_CONTEXT\n@@ -2335,7 +2335,7 @@ ifneq ($(findstring openssl,$(CSPRNG_METHOD)),)\n endif\n \n ifndef HAVE_PLATFORM_PROCINFO\n-\tCOMPAT_OBJS += compat/stub/procinfo.o\n+\tCOMPAT_OBJS += lib/compat/stub/procinfo.o\n endif\n \n ifdef RUNTIME_PREFIX\n@@ -2365,25 +2365,25 @@ endif\n \n ifdef FILENO_IS_A_MACRO\n \tCOMPAT_CFLAGS += -DFILENO_IS_A_MACRO\n-\tCOMPAT_OBJS += compat/fileno.o\n+\tCOMPAT_OBJS += lib/compat/fileno.o\n endif\n \n ifdef NEED_ACCESS_ROOT_HANDLER\n \tCOMPAT_CFLAGS += -DNEED_ACCESS_ROOT_HANDLER\n-\tCOMPAT_OBJS += compat/access.o\n+\tCOMPAT_OBJS += lib/compat/access.o\n endif\n \n ifdef FSMONITOR_DAEMON_BACKEND\n \tCOMPAT_CFLAGS += -DHAVE_FSMONITOR_DAEMON_BACKEND\n-\tCOMPAT_OBJS += compat/fsmonitor/fsm-listen-$(FSMONITOR_DAEMON_BACKEND).o\n-\tCOMPAT_OBJS += compat/fsmonitor/fsm-health-$(FSMONITOR_DAEMON_BACKEND).o\n+\tCOMPAT_OBJS += lib/compat/fsmonitor/fsm-listen-$(FSMONITOR_DAEMON_BACKEND).o\n+\tCOMPAT_OBJS += lib/compat/fsmonitor/fsm-health-$(FSMONITOR_DAEMON_BACKEND).o\n endif\n \n ifdef FSMONITOR_OS_SETTINGS\n \tCOMPAT_CFLAGS += -DHAVE_FSMONITOR_OS_SETTINGS\n-\tCOMPAT_OBJS += compat/fsmonitor/fsm-ipc-$(FSMONITOR_OS_SETTINGS).o\n-\tCOMPAT_OBJS += compat/fsmonitor/fsm-settings-$(FSMONITOR_OS_SETTINGS).o\n-\tCOMPAT_OBJS += compat/fsmonitor/fsm-path-utils-$(FSMONITOR_DAEMON_BACKEND).o\n+\tCOMPAT_OBJS += lib/compat/fsmonitor/fsm-ipc-$(FSMONITOR_OS_SETTINGS).o\n+\tCOMPAT_OBJS += lib/compat/fsmonitor/fsm-settings-$(FSMONITOR_OS_SETTINGS).o\n+\tCOMPAT_OBJS += lib/compat/fsmonitor/fsm-path-utils-$(FSMONITOR_DAEMON_BACKEND).o\n endif\n \n ifdef WITH_BREAKING_CHANGES\n@@ -2667,9 +2667,9 @@ git$X: git.o GIT-LDFLAGS $(BUILTIN_OBJS) $(GITLIBS)\n \t$(QUIET_LINK)$(CC) $(ALL_CFLAGS) -o $@ $(ALL_LDFLAGS) \\\n \t\t$(filter %.o,$^) $(LIBS)\n \n-help.sp help.s help.o: command-list.h\n+lib/help.sp lib/help.s lib/help.o: command-list.h\n builtin/bugreport.sp builtin/bugreport.s builtin/bugreport.o: hook-list.h\n-hook.sp hook.s hook.o: hook-list.h\n+lib/hook.sp lib/hook.s lib/hook.o: hook-list.h\n \n builtin/help.sp builtin/help.s builtin/help.o: config-list.h GIT-PREFIX\n builtin/help.sp builtin/help.s builtin/help.o: EXTRA_CPPFLAGS = \\\n@@ -2680,13 +2680,13 @@ builtin/help.sp builtin/help.s builtin/help.o: EXTRA_CPPFLAGS = \\\n PAGER_ENV_SQ = $(subst ','\\'',$(PAGER_ENV))\n PAGER_ENV_CQ = \"$(subst \",\\\",$(subst \\,\\\\,$(PAGER_ENV)))\"\n PAGER_ENV_CQ_SQ = $(subst ','\\'',$(PAGER_ENV_CQ))\n-pager.sp pager.s pager.o: EXTRA_CPPFLAGS = \\\n+lib/pager.sp lib/pager.s lib/pager.o: EXTRA_CPPFLAGS = \\\n \t-DPAGER_ENV='$(PAGER_ENV_CQ_SQ)'\n \n-version-def.h: version-def.h.in GIT-VERSION-GEN GIT-VERSION-FILE GIT-USER-AGENT\n+version-def.h: lib/version-def.h.in GIT-VERSION-GEN GIT-VERSION-FILE GIT-USER-AGENT\n \t$(QUIET_GEN)$(call version_gen,\"$(shell pwd)\",$<,$@)\n \n-version.sp version.s version.o: version-def.h\n+lib/version.sp lib/version.s lib/version.o: version-def.h\n \n $(BUILT_INS): git$X\n \t$(QUIET_BUILT_IN)$(RM) $@ && \\\n@@ -2879,7 +2879,7 @@ ifdef INCLUDE_LIBGIT_RS\n endif\n \n ifndef NO_CURL\n-\tOBJECTS += http.o http-walker.o remote-curl.o\n+\tOBJECTS += lib/http.o lib/http-walker.o remote-curl.o\n endif\n \n .PHONY: objects\n@@ -2944,44 +2944,44 @@ compile_commands.json:\n \t@if test -s $@+; then mv $@+ $@; else $(RM) $@+; fi\n endif\n \n-exec-cmd.sp exec-cmd.s exec-cmd.o: GIT-PREFIX\n-exec-cmd.sp exec-cmd.s exec-cmd.o: EXTRA_CPPFLAGS = \\\n+lib/exec-cmd.sp lib/exec-cmd.s lib/exec-cmd.o: GIT-PREFIX\n+lib/exec-cmd.sp lib/exec-cmd.s lib/exec-cmd.o: EXTRA_CPPFLAGS = \\\n \t'-DGIT_EXEC_PATH=\"$(gitexecdir_SQ)\"' \\\n \t'-DGIT_LOCALE_PATH=\"$(localedir_relative_SQ)\"' \\\n \t'-DBINDIR=\"$(bindir_relative_SQ)\"' \\\n \t'-DFALLBACK_RUNTIME_PREFIX=\"$(prefix_SQ)\"'\n \n-setup.sp setup.s setup.o: GIT-PREFIX\n-setup.sp setup.s setup.o: EXTRA_CPPFLAGS = \\\n+lib/setup.sp lib/setup.s lib/setup.o: GIT-PREFIX\n+lib/setup.sp lib/setup.s lib/setup.o: EXTRA_CPPFLAGS = \\\n \t-DDEFAULT_GIT_TEMPLATE_DIR='\"$(template_dir_SQ)\"'\n \n-config.sp config.s config.o: GIT-PREFIX\n-config.sp config.s config.o: EXTRA_CPPFLAGS = \\\n+lib/config.sp lib/config.s lib/config.o: GIT-PREFIX\n+lib/config.sp lib/config.s lib/config.o: EXTRA_CPPFLAGS = \\\n \t-DETC_GITCONFIG='\"$(ETC_GITCONFIG_SQ)\"'\n \n-attr.sp attr.s attr.o: GIT-PREFIX\n-attr.sp attr.s attr.o: EXTRA_CPPFLAGS = \\\n+lib/attr.sp lib/attr.s lib/attr.o: GIT-PREFIX\n+lib/attr.sp lib/attr.s lib/attr.o: EXTRA_CPPFLAGS = \\\n \t-DETC_GITATTRIBUTES='\"$(ETC_GITATTRIBUTES_SQ)\"'\n \n-gettext.sp gettext.s gettext.o: GIT-PREFIX\n-gettext.sp gettext.s gettext.o: EXTRA_CPPFLAGS = \\\n+lib/gettext.sp lib/gettext.s lib/gettext.o: GIT-PREFIX\n+lib/gettext.sp lib/gettext.s lib/gettext.o: EXTRA_CPPFLAGS = \\\n \t-DGIT_LOCALE_PATH='\"$(localedir_relative_SQ)\"'\n \n-http-push.sp http.sp http-walker.sp remote-curl.sp imap-send.sp: SP_EXTRA_FLAGS += \\\n+http-push.sp lib/http.sp lib/http-walker.sp remote-curl.sp imap-send.sp: SP_EXTRA_FLAGS += \\\n \t-DCURL_DISABLE_TYPECHECK\n \n pack-revindex.sp: SP_EXTRA_FLAGS += -Wno-memcpy-max-count\n \n ifdef NO_EXPAT\n-http-walker.sp http-walker.s http-walker.o: EXTRA_CPPFLAGS = -DNO_EXPAT\n+lib/http-walker.sp lib/http-walker.s lib/http-walker.o: EXTRA_CPPFLAGS = -DNO_EXPAT\n endif\n \n ifdef NO_REGEX\n-compat/regex/regex.sp compat/regex/regex.o: EXTRA_CPPFLAGS = \\\n+lib/compat/regex/regex.sp lib/compat/regex/regex.o: EXTRA_CPPFLAGS = \\\n \t-DGAWK -DNO_MBSUPPORT\n endif\n \n-headless-git.o: compat/win32/headless.c GIT-CFLAGS\n+headless-git.o: lib/compat/win32/headless.c GIT-CFLAGS\n \t$(QUIET_CC)$(CC) $(ALL_CFLAGS) $(COMPAT_CFLAGS) \\\n \t\t-fno-stack-protector -o $@ -c -Wall -Wwrite-strings $<\n \n@@ -2995,10 +2995,10 @@ git-imap-send$X: imap-send.o $(IMAP_SEND_BUILDDEPS) GIT-LDFLAGS $(GITLIBS)\n \t$(QUIET_LINK)$(CC) $(ALL_CFLAGS) -o $@ $(ALL_LDFLAGS) $(filter %.o,$^) \\\n \t\t$(IMAP_SEND_LDFLAGS) $(LIBS)\n \n-git-http-fetch$X: http.o http-walker.o http-fetch.o GIT-LDFLAGS $(GITLIBS)\n+git-http-fetch$X: lib/http.o lib/http-walker.o http-fetch.o GIT-LDFLAGS $(GITLIBS)\n \t$(QUIET_LINK)$(CC) $(ALL_CFLAGS) -o $@ $(ALL_LDFLAGS) $(filter %.o,$^) \\\n \t\t$(CURL_LIBCURL) $(LIBS)\n-git-http-push$X: http.o http-push.o GIT-LDFLAGS $(GITLIBS)\n+git-http-push$X: lib/http.o http-push.o GIT-LDFLAGS $(GITLIBS)\n \t$(QUIET_LINK)$(CC) $(ALL_CFLAGS) -o $@ $(ALL_LDFLAGS) $(filter %.o,$^) \\\n \t\t$(CURL_LIBCURL) $(EXPAT_LIBEXPAT) $(LIBS)\n \n@@ -3008,7 +3008,7 @@ $(REMOTE_CURL_ALIASES): $(REMOTE_CURL_PRIMARY)\n \tln -s $< $@ 2>/dev/null || \\\n \tcp $< $@\n \n-$(REMOTE_CURL_PRIMARY): remote-curl.o http.o http-walker.o GIT-LDFLAGS $(GITLIBS)\n+$(REMOTE_CURL_PRIMARY): remote-curl.o lib/http.o lib/http-walker.o GIT-LDFLAGS $(GITLIBS)\n \t$(QUIET_LINK)$(CC) $(ALL_CFLAGS) -o $@ $(ALL_LDFLAGS) $(filter %.o,$^) \\\n \t\t$(CURL_LIBCURL) $(EXPAT_LIBEXPAT) $(LIBS)\n \n@@ -3172,8 +3172,8 @@ LOCALIZED_C_CORE += builtin/clone.c\n LOCALIZED_C_CORE += builtin/index-pack.c\n LOCALIZED_C_CORE += builtin/push.c\n LOCALIZED_C_CORE += builtin/reset.c\n-LOCALIZED_C_CORE += remote.c\n-LOCALIZED_C_CORE += wt-status.c\n+LOCALIZED_C_CORE += lib/remote.c\n+LOCALIZED_C_CORE += lib/wt-status.c\n \n LOCALIZED_C_CORE_GEN_PO = $(LOCALIZED_C_CORE:%=.build/pot/po/%.po)\n \n@@ -3412,18 +3412,18 @@ $(SP_OBJ): %.sp: %.c %.o $(GENERATED_H)\n .PHONY: sparse\n sparse: $(SP_OBJ)\n \n-EXCEPT_HDRS := $(GENERATED_H) unicode-width.h compat/% xdiff/% $(UNIT_TEST_DIR)/clar/% $(UNIT_TEST_DIR)/clar/clar/%\n+EXCEPT_HDRS := $(GENERATED_H) lib/unicode-width.h lib/compat/% lib/xdiff/% $(UNIT_TEST_DIR)/clar/% $(UNIT_TEST_DIR)/clar/clar/%\n ifndef OPENSSL_SHA1\n-\tEXCEPT_HDRS += sha1/openssl.h\n+\tEXCEPT_HDRS += lib/sha1/openssl.h\n endif\n ifndef OPENSSL_SHA256\n-\tEXCEPT_HDRS += sha256/openssl.h\n+\tEXCEPT_HDRS += lib/sha256/openssl.h\n endif\n ifndef NETTLE_SHA256\n-\tEXCEPT_HDRS += sha256/nettle.h\n+\tEXCEPT_HDRS += lib/sha256/nettle.h\n endif\n ifndef GCRYPT_SHA256\n-\tEXCEPT_HDRS += sha256/gcrypt.h\n+\tEXCEPT_HDRS += lib/sha256/gcrypt.h\n endif\n CHK_HDRS = $(filter-out $(EXCEPT_HDRS),$(LIB_H))\n HCO = $(patsubst %.h,%.hco,$(CHK_HDRS))\n@@ -3775,13 +3775,13 @@ GIT_ARCHIVE_EXTRA_FILES = \\\n \t--add-file=.dist-tmp-dir/git-gui/version\n ifdef DC_SHA1_SUBMODULE\n GIT_ARCHIVE_EXTRA_FILES += \\\n-\t--prefix=$(GIT_TARNAME)/sha1collisiondetection/ \\\n-\t--add-file=sha1collisiondetection/LICENSE.txt \\\n-\t--prefix=$(GIT_TARNAME)/sha1collisiondetection/lib/ \\\n-\t--add-file=sha1collisiondetection/lib/sha1.c \\\n-\t--add-file=sha1collisiondetection/lib/sha1.h \\\n-\t--add-file=sha1collisiondetection/lib/ubc_check.c \\\n-\t--add-file=sha1collisiondetection/lib/ubc_check.h\n+\t--prefix=$(GIT_TARNAME)/lib/sha1collisiondetection/ \\\n+\t--add-file=lib/sha1collisiondetection/LICENSE.txt \\\n+\t--prefix=$(GIT_TARNAME)/lib/sha1collisiondetection/lib/ \\\n+\t--add-file=lib/sha1collisiondetection/lib/sha1.c \\\n+\t--add-file=lib/sha1collisiondetection/lib/sha1.h \\\n+\t--add-file=lib/sha1collisiondetection/lib/ubc_check.c \\\n+\t--add-file=lib/sha1collisiondetection/lib/ubc_check.h\n endif\n dist: git-archive$(X) configure\n \t@$(RM) -r .dist-tmp-dir\n@@ -3911,7 +3911,7 @@ ifdef MSVC\n \t$(RM) $(patsubst %.exe,%.pdb,$(TEST_PROGRAMS))\n \t$(RM) $(patsubst %.exe,%.iobj,$(TEST_PROGRAMS))\n \t$(RM) $(patsubst %.exe,%.ipdb,$(TEST_PROGRAMS))\n-\t$(RM) compat/vcbuild/MSVC-DEFS-GEN\n+\t$(RM) lib/compat/vcbuild/MSVC-DEFS-GEN\n endif\n \n .PHONY: all install profile-clean cocciclean clean strip\ndiff --git a/config.mak.uname b/config.mak.uname\nindex 8719e09f66..7af406439e 100644\n--- a/config.mak.uname\n+++ b/config.mak.uname\n@@ -21,17 +21,17 @@ ifdef MSVC\n \n \t# Generate and include makefile variables that point to the\n \t# currently installed set of MSVC command line tools.\n-compat/vcbuild/MSVC-DEFS-GEN: compat/vcbuild/find_vs_env.bat\n+lib/compat/vcbuild/MSVC-DEFS-GEN: lib/compat/vcbuild/find_vs_env.bat\n \t@\"$<\" | tr '\\\\' / >\"$@\"\n-include compat/vcbuild/MSVC-DEFS-GEN\n+include lib/compat/vcbuild/MSVC-DEFS-GEN\n \n \t# See if vcpkg and the vcpkg-build versions of the third-party\n \t# libraries that we use are installed.  We include the result\n \t# to get $(vcpkg_*) variables defined for the Makefile.\n ifeq (,$(SKIP_VCPKG))\n-compat/vcbuild/VCPKG-DEFS: compat/vcbuild/vcpkg_install.bat\n+lib/compat/vcbuild/VCPKG-DEFS: lib/compat/vcbuild/vcpkg_install.bat\n \t@\"$<\"\n-include compat/vcbuild/VCPKG-DEFS\n+include lib/compat/vcbuild/VCPKG-DEFS\n endif\n endif\n \n@@ -62,7 +62,7 @@ ifeq ($(uname_S),Linux)\n \tHAVE_SYSINFO = YesPlease\n \tPROCFS_EXECUTABLE_PATH = /proc/self/exe\n \tHAVE_PLATFORM_PROCINFO = YesPlease\n-\tCOMPAT_OBJS += compat/linux/procinfo.o\n+\tCOMPAT_OBJS += lib/compat/linux/procinfo.o\n \tEXTLIBS += -ldl\n \t# centos7/rhel7 provides gcc 4.8.5 and zlib 1.2.7.\n         ifneq ($(findstring .el7.,$(uname_R)),)\n@@ -152,7 +152,7 @@ ifeq ($(uname_S),Darwin)\n \tNO_MEMMEM = YesPlease\n \tUSE_ST_TIMESPEC = YesPlease\n \tHAVE_DEV_TTY = YesPlease\n-\tCOMPAT_OBJS += compat/precompose_utf8.o\n+\tCOMPAT_OBJS += lib/compat/precompose_utf8.o\n \tBASIC_CFLAGS += -DPRECOMPOSE_UNICODE\n \tBASIC_CFLAGS += -DPROTECT_HFS_DEFAULT=1\n \tHAVE_BSD_SYSCTL = YesPlease\n@@ -161,7 +161,7 @@ ifeq ($(uname_S),Darwin)\n \tCSPRNG_METHOD = arc4random\n \tUSE_ENHANCED_BASIC_REGULAR_EXPRESSIONS = YesPlease\n \tHAVE_PLATFORM_PROCINFO = YesPlease\n-\tCOMPAT_OBJS += compat/darwin/procinfo.o\n+\tCOMPAT_OBJS += lib/compat/darwin/procinfo.o\n \n         ifeq ($(uname_M),arm64)\n \t\tHOMEBREW_PREFIX = /opt/homebrew\n@@ -292,7 +292,7 @@ ifeq ($(uname_O),Cygwin)\n \tUNRELIABLE_FSTAT = UnfortunatelyYes\n \tOBJECT_CREATION_USES_RENAMES = UnfortunatelyNeedsTo\n \tMMAP_PREVENTS_DELETE = UnfortunatelyYes\n-\tCOMPAT_OBJS += compat/win32/path-utils.o\n+\tCOMPAT_OBJS += lib/compat/win32/path-utils.o\n \tFREAD_READS_DIRECTORIES = UnfortunatelyYes\n endif\n ifeq ($(uname_S),FreeBSD)\n@@ -523,17 +523,17 @@ ifeq (/mingw64,$(subst 32,64,$(subst clangarm,mingw,$(prefix))))\n \tETC_GITATTRIBUTES = ../etc/gitattributes\n endif\n \n-\tCC = compat/vcbuild/scripts/clink.pl\n-\tAR = compat/vcbuild/scripts/lib.pl\n+\tCC = lib/compat/vcbuild/scripts/clink.pl\n+\tAR = lib/compat/vcbuild/scripts/lib.pl\n \tCFLAGS =\n-\tBASIC_CFLAGS = -nologo -I. -Icompat/vcbuild/include -DWIN32 -D_CONSOLE -DHAVE_STRING_H -D_CRT_SECURE_NO_WARNINGS -D_CRT_NONSTDC_NO_DEPRECATE\n-\tCOMPAT_OBJS = compat/msvc.o compat/winansi.o \\\n-\t\tcompat/win32/flush.o \\\n-\t\tcompat/win32/path-utils.o \\\n-\t\tcompat/win32/pthread.o compat/win32/syslog.o \\\n-\t\tcompat/win32/trace2_win32_process_info.o \\\n-\t\tcompat/win32/dirent.o\n-\tCOMPAT_CFLAGS = -D__USE_MINGW_ACCESS -DDETECT_MSYS_TTY -DNOGDI -DHAVE_STRING_H -Icompat -Icompat/regex -Icompat/win32 -DSTRIP_EXTENSION=\\\".exe\\\"\n+\tBASIC_CFLAGS = -nologo -I. -Ilib/compat/vcbuild/include -DWIN32 -D_CONSOLE -DHAVE_STRING_H -D_CRT_SECURE_NO_WARNINGS -D_CRT_NONSTDC_NO_DEPRECATE\n+\tCOMPAT_OBJS = lib/compat/msvc.o lib/compat/winansi.o \\\n+\t\tlib/compat/win32/flush.o \\\n+\t\tlib/compat/win32/path-utils.o \\\n+\t\tlib/compat/win32/pthread.o lib/compat/win32/syslog.o \\\n+\t\tlib/compat/win32/trace2_win32_process_info.o \\\n+\t\tlib/compat/win32/dirent.o\n+\tCOMPAT_CFLAGS = -D__USE_MINGW_ACCESS -DDETECT_MSYS_TTY -DNOGDI -DHAVE_STRING_H -Ilib/compat -Ilib/compat/regex -Ilib/compat/win32 -DSTRIP_EXTENSION=\\\".exe\\\"\n \tBASIC_LDFLAGS = -IGNORE:4217 -IGNORE:4049 -NOLOGO -ENTRY:wmainCRTStartup -SUBSYSTEM:CONSOLE\n \t# invalidcontinue.obj allows Git's source code to close the same file\n \t# handle twice, or to access the osfhandle of an already-closed stdout\n@@ -573,7 +573,7 @@ endif\n \n \tEXTRA_PROGRAMS += headless-git$X\n \n-compat/msvc.o: compat/msvc.c compat/mingw.c GIT-CFLAGS\n+lib/compat/msvc.o: lib/compat/msvc.c lib/compat/mingw.c GIT-CFLAGS\n endif\n ifeq ($(uname_S),Interix)\n \tNO_INITGROUPS = YesPlease\n@@ -724,14 +724,14 @@ ifeq ($(uname_S),MINGW)\n \tHAVE_PLATFORM_PROCINFO = YesPlease\n \tCSPRNG_METHOD = rtlgenrandom\n \tBASIC_LDFLAGS += -municode\n-\tCOMPAT_CFLAGS += -DNOGDI -Icompat -Icompat/win32\n+\tCOMPAT_CFLAGS += -DNOGDI -Ilib/compat -Ilib/compat/win32\n \tCOMPAT_CFLAGS += -DSTRIP_EXTENSION=\\\".exe\\\"\n-\tCOMPAT_OBJS += compat/mingw.o compat/winansi.o \\\n-\t\tcompat/win32/trace2_win32_process_info.o \\\n-\t\tcompat/win32/flush.o \\\n-\t\tcompat/win32/path-utils.o \\\n-\t\tcompat/win32/pthread.o compat/win32/syslog.o \\\n-\t\tcompat/win32/dirent.o\n+\tCOMPAT_OBJS += lib/compat/mingw.o lib/compat/winansi.o \\\n+\t\tlib/compat/win32/trace2_win32_process_info.o \\\n+\t\tlib/compat/win32/flush.o \\\n+\t\tlib/compat/win32/path-utils.o \\\n+\t\tlib/compat/win32/pthread.o lib/compat/win32/syslog.o \\\n+\t\tlib/compat/win32/dirent.o\n \tBASIC_CFLAGS += -DWIN32\n \tEXTLIBS += -lws2_32\n \tGITLIBS += git.res\ndiff --git a/contrib/buildsystems/CMakeLists.txt b/contrib/buildsystems/CMakeLists.txt\nindex a57c4b464f..446a6c889f 100644\n--- a/contrib/buildsystems/CMakeLists.txt\n+++ b/contrib/buildsystems/CMakeLists.txt\n@@ -62,10 +62,10 @@ if(NOT DEFINED CMAKE_EXPORT_COMPILE_COMMANDS)\n endif()\n \n if(USE_VCPKG)\n-\tset(VCPKG_DIR \"${CMAKE_SOURCE_DIR}/compat/vcbuild/vcpkg\")\n+\tset(VCPKG_DIR \"${CMAKE_SOURCE_DIR}/lib/compat/vcbuild/vcpkg\")\n \tif(NOT EXISTS ${VCPKG_DIR})\n \t\tmessage(\"Initializing vcpkg and building the Git's dependencies (this will take a while...)\")\n-\t\texecute_process(COMMAND ${CMAKE_SOURCE_DIR}/compat/vcbuild/vcpkg_install.bat)\n+\t\texecute_process(COMMAND ${CMAKE_SOURCE_DIR}/lib/compat/vcbuild/vcpkg_install.bat)\n \tendif()\n \tlist(APPEND CMAKE_PREFIX_PATH \"${VCPKG_DIR}/installed/x64-windows\")\n \n@@ -194,7 +194,7 @@ else()\n \tfind_program(MSGFMT_EXE msgfmt)\n \tif(NOT MSGFMT_EXE)\n \t\tif(USE_VCPKG)\n-\t\t\tset(MSGFMT_EXE ${CMAKE_SOURCE_DIR}/compat/vcbuild/vcpkg/downloads/tools/msys2/msys64/usr/bin/msgfmt.exe)\n+\t\t\tset(MSGFMT_EXE ${CMAKE_SOURCE_DIR}/lib/compat/vcbuild/vcpkg/downloads/tools/msys2/msys64/usr/bin/msgfmt.exe)\n \t\tendif()\n \t\tif(NOT EXISTS ${MSGFMT_EXE})\n \t\t\tmessage(WARNING \"Text Translations won't be built\")\n@@ -212,13 +212,14 @@ endif()\n \n #default behaviour\n include_directories(${CMAKE_SOURCE_DIR})\n+include_directories(${CMAKE_SOURCE_DIR}/lib)\n add_compile_definitions(GIT_HOST_CPU=\"${CMAKE_SYSTEM_PROCESSOR}\")\n add_compile_definitions(SHA256_BLK INTERNAL_QSORT RUNTIME_PREFIX)\n add_compile_definitions(NO_OPENSSL SHA1_DC SHA1DC_NO_STANDARD_INCLUDES\n \t\t\tSHA1DC_INIT_SAFE_HASH_DEFAULT=0\n \t\t\tSHA1DC_CUSTOM_INCLUDE_SHA1_C=\"git-compat-util.h\"\n \t\t\tSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C=\"git-compat-util.h\" )\n-list(APPEND compat_SOURCES sha1dc_git.c sha1dc/sha1.c sha1dc/ubc_check.c block-sha1/sha1.c sha256/block/sha256.c compat/qsort_s.c)\n+list(APPEND compat_SOURCES lib/sha1dc_git.c lib/sha1dc/sha1.c lib/sha1dc/ubc_check.c lib/block-sha1/sha1.c lib/sha256/block/sha256.c lib/compat/qsort_s.c)\n \n \n add_compile_definitions(PAGER_ENV=\"LESS=FRX LV=-c\"\n@@ -248,43 +249,43 @@ endif()\n #Platform Specific\n if(CMAKE_SYSTEM_NAME STREQUAL \"Windows\")\n \tif(CMAKE_C_COMPILER_ID STREQUAL \"MSVC\" OR CMAKE_C_COMPILER_ID STREQUAL \"Clang\")\n-\t\tinclude_directories(${CMAKE_SOURCE_DIR}/compat/vcbuild/include)\n+\t\tinclude_directories(${CMAKE_SOURCE_DIR}/lib/compat/vcbuild/include)\n \t\tadd_compile_definitions(_CRT_SECURE_NO_WARNINGS _CRT_NONSTDC_NO_DEPRECATE)\n \tendif()\n-\tinclude_directories(${CMAKE_SOURCE_DIR}/compat/win32)\n+\tinclude_directories(${CMAKE_SOURCE_DIR}/lib/compat/win32)\n \tadd_compile_definitions(HAVE_ALLOCA_H NO_POSIX_GOODIES NATIVE_CRLF NO_UNIX_SOCKETS WIN32\n \t\t\t\t_CONSOLE DETECT_MSYS_TTY STRIP_EXTENSION=\".exe\"  NO_SYMLINK_HEAD UNRELIABLE_FSTAT\n \t\t\t\tNOGDI OBJECT_CREATION_MODE=1 __USE_MINGW_ANSI_STDIO=0\n \t\t\t\tOVERRIDE_STRDUP MMAP_PREVENTS_DELETE USE_WIN32_MMAP\n \t\t\t\tHAVE_WPGMPTR ENSURE_MSYSTEM_IS_SET HAVE_RTLGENRANDOM)\n \tlist(APPEND compat_SOURCES\n-\t\tcompat/mingw.c\n-\t\tcompat/winansi.c\n-\t\tcompat/win32/flush.c\n-\t\tcompat/win32/path-utils.c\n-\t\tcompat/win32/pthread.c\n-\t\tcompat/win32mmap.c\n-\t\tcompat/win32/syslog.c\n-\t\tcompat/win32/trace2_win32_process_info.c\n-\t\tcompat/win32/dirent.c\n-\t\tcompat/strdup.c)\n+\t\tlib/compat/mingw.c\n+\t\tlib/compat/winansi.c\n+\t\tlib/compat/win32/flush.c\n+\t\tlib/compat/win32/path-utils.c\n+\t\tlib/compat/win32/pthread.c\n+\t\tlib/compat/win32mmap.c\n+\t\tlib/compat/win32/syslog.c\n+\t\tlib/compat/win32/trace2_win32_process_info.c\n+\t\tlib/compat/win32/dirent.c\n+\t\tlib/compat/strdup.c)\n \tset(NO_UNIX_SOCKETS 1)\n \n elseif(CMAKE_SYSTEM_NAME STREQUAL \"Linux\")\n \tadd_compile_definitions(PROCFS_EXECUTABLE_PATH=\"/proc/self/exe\" HAVE_DEV_TTY )\n-\tlist(APPEND compat_SOURCES unix-socket.c unix-stream-server.c compat/linux/procinfo.c)\n+\tlist(APPEND compat_SOURCES lib/unix-socket.c lib/unix-stream-server.c lib/compat/linux/procinfo.c)\n elseif(CMAKE_SYSTEM_NAME STREQUAL \"Darwin\")\n-\tlist(APPEND compat_SOURCES compat/darwin/procinfo.c)\n+\tlist(APPEND compat_SOURCES lib/compat/darwin/procinfo.c)\n endif()\n \n if(CMAKE_SYSTEM_NAME STREQUAL \"Windows\")\n-\tlist(APPEND compat_SOURCES compat/simple-ipc/ipc-shared.c compat/simple-ipc/ipc-win32.c)\n+\tlist(APPEND compat_SOURCES lib/compat/simple-ipc/ipc-shared.c lib/compat/simple-ipc/ipc-win32.c)\n \tadd_compile_definitions(SUPPORTS_SIMPLE_IPC)\n \tset(SUPPORTS_SIMPLE_IPC 1)\n else()\n \t# Simple IPC requires both Unix sockets and pthreads on Unix-based systems.\n \tif(NOT NO_UNIX_SOCKETS AND NOT NO_PTHREADS)\n-\t\tlist(APPEND compat_SOURCES compat/simple-ipc/ipc-shared.c compat/simple-ipc/ipc-unix-socket.c)\n+\t\tlist(APPEND compat_SOURCES lib/compat/simple-ipc/ipc-shared.c lib/compat/simple-ipc/ipc-unix-socket.c)\n \t\tadd_compile_definitions(SUPPORTS_SIMPLE_IPC)\n \t\tset(SUPPORTS_SIMPLE_IPC 1)\n \tendif()\n@@ -305,13 +306,13 @@ if(SUPPORTS_SIMPLE_IPC)\n \n \tif(FSMONITOR_DAEMON_BACKEND)\n \t\tadd_compile_definitions(HAVE_FSMONITOR_DAEMON_BACKEND)\n-\t\tlist(APPEND compat_SOURCES compat/fsmonitor/fsm-listen-${FSMONITOR_DAEMON_BACKEND}.c)\n-\t\tlist(APPEND compat_SOURCES compat/fsmonitor/fsm-health-${FSMONITOR_DAEMON_BACKEND}.c)\n-\t\tlist(APPEND compat_SOURCES compat/fsmonitor/fsm-ipc-${FSMONITOR_OS_SETTINGS}.c)\n-\t\tlist(APPEND compat_SOURCES compat/fsmonitor/fsm-path-utils-${FSMONITOR_DAEMON_BACKEND}.c)\n+\t\tlist(APPEND compat_SOURCES lib/compat/fsmonitor/fsm-listen-${FSMONITOR_DAEMON_BACKEND}.c)\n+\t\tlist(APPEND compat_SOURCES lib/compat/fsmonitor/fsm-health-${FSMONITOR_DAEMON_BACKEND}.c)\n+\t\tlist(APPEND compat_SOURCES lib/compat/fsmonitor/fsm-ipc-${FSMONITOR_OS_SETTINGS}.c)\n+\t\tlist(APPEND compat_SOURCES lib/compat/fsmonitor/fsm-path-utils-${FSMONITOR_DAEMON_BACKEND}.c)\n \n \t\tadd_compile_definitions(HAVE_FSMONITOR_OS_SETTINGS)\n-\t\tlist(APPEND compat_SOURCES compat/fsmonitor/fsm-settings-${FSMONITOR_OS_SETTINGS}.c)\n+\t\tlist(APPEND compat_SOURCES lib/compat/fsmonitor/fsm-settings-${FSMONITOR_OS_SETTINGS}.c)\n \tendif()\n endif()\n \n@@ -321,7 +322,7 @@ set(EXE_EXTENSION ${CMAKE_EXECUTABLE_SUFFIX})\n check_include_file(libgen.h HAVE_LIBGEN_H)\n if(NOT HAVE_LIBGEN_H)\n \tadd_compile_definitions(NO_LIBGEN_H)\n-\tlist(APPEND compat_SOURCES compat/basename.c)\n+\tlist(APPEND compat_SOURCES lib/compat/basename.c)\n endif()\n \n check_include_file(sys/sysinfo.h HAVE_SYSINFO)\n@@ -394,42 +395,42 @@ foreach(f ${function_checks})\n endforeach()\n \n if(NOT HAVE_POLL_H OR NOT HAVE_SYS_POLL_H OR NOT HAVE_POLL)\n-\tinclude_directories(${CMAKE_SOURCE_DIR}/compat/poll)\n+\tinclude_directories(${CMAKE_SOURCE_DIR}/lib/compat/poll)\n \tadd_compile_definitions(NO_POLL)\n-\tlist(APPEND compat_SOURCES compat/poll/poll.c)\n+\tlist(APPEND compat_SOURCES lib/compat/poll/poll.c)\n endif()\n \n if(NOT HAVE_STRCASESTR)\n-\tlist(APPEND compat_SOURCES compat/strcasestr.c)\n+\tlist(APPEND compat_SOURCES lib/compat/strcasestr.c)\n endif()\n \n if(NOT HAVE_STRLCPY)\n-\tlist(APPEND compat_SOURCES compat/strlcpy.c)\n+\tlist(APPEND compat_SOURCES lib/compat/strlcpy.c)\n endif()\n \n if(NOT HAVE_STRTOUMAX)\n-\tlist(APPEND compat_SOURCES compat/strtoumax.c compat/strtoimax.c)\n+\tlist(APPEND compat_SOURCES lib/compat/strtoumax.c lib/compat/strtoimax.c)\n endif()\n \n if(NOT HAVE_SETENV)\n-\tlist(APPEND compat_SOURCES compat/setenv.c)\n+\tlist(APPEND compat_SOURCES lib/compat/setenv.c)\n endif()\n \n if(NOT HAVE_PREAD)\n-\tlist(APPEND compat_SOURCES compat/pread.c)\n+\tlist(APPEND compat_SOURCES lib/compat/pread.c)\n endif()\n \n if(NOT HAVE_MEMMEM)\n-\tlist(APPEND compat_SOURCES compat/memmem.c)\n+\tlist(APPEND compat_SOURCES lib/compat/memmem.c)\n endif()\n \n if(NOT WIN32)\n \tif(NOT HAVE_UNSETENV)\n-\t\tlist(APPEND compat_SOURCES compat/unsetenv.c)\n+\t\tlist(APPEND compat_SOURCES lib/compat/unsetenv.c)\n \tendif()\n \n \tif(NOT HAVE_HSTRERROR)\n-\t\tlist(APPEND compat_SOURCES compat/hstrerror.c)\n+\t\tlist(APPEND compat_SOURCES lib/compat/hstrerror.c)\n \tendif()\n endif()\n \n@@ -486,7 +487,7 @@ int main(void)\n SNPRINTF_OK)\n if(NOT SNPRINTF_OK)\n \tadd_compile_definitions(SNPRINTF_RETURNS_BOGUS)\n-\tlist(APPEND compat_SOURCES compat/snprintf.c)\n+\tlist(APPEND compat_SOURCES lib/compat/snprintf.c)\n endif()\n \n check_c_source_runs(\"\n@@ -501,7 +502,7 @@ int main(void)\n FREAD_READS_DIRECTORIES_NO)\n if(NOT FREAD_READS_DIRECTORIES_NO)\n \tadd_compile_definitions(FREAD_READS_DIRECTORIES)\n-\tlist(APPEND compat_SOURCES compat/fopen.c)\n+\tlist(APPEND compat_SOURCES lib/compat/fopen.c)\n endif()\n \n check_c_source_compiles(\"\n@@ -516,8 +517,8 @@ int main(void)\n }\"\n HAVE_REGEX)\n if(NOT HAVE_REGEX)\n-\tinclude_directories(${CMAKE_SOURCE_DIR}/compat/regex)\n-\tlist(APPEND compat_SOURCES compat/regex/regex.c )\n+\tinclude_directories(${CMAKE_SOURCE_DIR}/lib/compat/regex)\n+\tlist(APPEND compat_SOURCES lib/compat/regex/regex.c )\n \tadd_compile_definitions(NO_REGEX NO_MBSUPPORT GAWK)\n endif()\n \n@@ -670,10 +671,10 @@ list(TRANSFORM compat_SOURCES PREPEND \"${CMAKE_SOURCE_DIR}/\")\n add_custom_command(OUTPUT \"${CMAKE_BINARY_DIR}/version-def.h\"\n \tCOMMAND \"${SH_EXE}\" \"${CMAKE_SOURCE_DIR}/GIT-VERSION-GEN\"\n \t\t\"${CMAKE_SOURCE_DIR}\"\n-\t\t\"${CMAKE_SOURCE_DIR}/version-def.h.in\"\n+\t\t\"${CMAKE_SOURCE_DIR}/lib/version-def.h.in\"\n \t\t\"${CMAKE_BINARY_DIR}/version-def.h\"\n \tDEPENDS \"${SH_EXE}\" \"${CMAKE_SOURCE_DIR}/GIT-VERSION-GEN\"\n-\t\t\"${CMAKE_SOURCE_DIR}/version-def.h.in\"\n+\t\t\"${CMAKE_SOURCE_DIR}/lib/version-def.h.in\"\n \tVERBATIM)\n list(APPEND libgit_SOURCES \"${CMAKE_BINARY_DIR}/version-def.h\")\n \n@@ -732,7 +733,7 @@ if(WIN32)\n \t\tmessage(FATAL_ERROR \"Unhandled compiler: ${CMAKE_C_COMPILER_ID}\")\n \tendif()\n \n-\tadd_executable(headless-git ${CMAKE_SOURCE_DIR}/compat/win32/headless.c)\n+\tadd_executable(headless-git ${CMAKE_SOURCE_DIR}/lib/compat/win32/headless.c)\n \tif(CMAKE_C_COMPILER_ID STREQUAL \"GNU\" OR CMAKE_C_COMPILER_ID STREQUAL \"Clang\")\n \t\ttarget_link_options(headless-git PUBLIC -municode -Wl,-subsystem,windows)\n \telseif(CMAKE_C_COMPILER_ID STREQUAL \"MSVC\")\n@@ -767,15 +768,15 @@ add_executable(scalar ${CMAKE_SOURCE_DIR}/scalar.c)\n target_link_libraries(scalar common-main)\n \n if(CURL_FOUND)\n-\tadd_library(http_obj OBJECT ${CMAKE_SOURCE_DIR}/http.c)\n+\tadd_library(http_obj OBJECT ${CMAKE_SOURCE_DIR}/lib/http.c)\n \n \tadd_executable(git-imap-send ${CMAKE_SOURCE_DIR}/imap-send.c)\n \ttarget_link_libraries(git-imap-send http_obj common-main ${CURL_LIBRARIES})\n \n-\tadd_executable(git-http-fetch ${CMAKE_SOURCE_DIR}/http-walker.c ${CMAKE_SOURCE_DIR}/http-fetch.c)\n+\tadd_executable(git-http-fetch ${CMAKE_SOURCE_DIR}/lib/http-walker.c ${CMAKE_SOURCE_DIR}/http-fetch.c)\n \ttarget_link_libraries(git-http-fetch http_obj common-main ${CURL_LIBRARIES})\n \n-\tadd_executable(git-remote-http ${CMAKE_SOURCE_DIR}/http-walker.c ${CMAKE_SOURCE_DIR}/remote-curl.c)\n+\tadd_executable(git-remote-http ${CMAKE_SOURCE_DIR}/lib/http-walker.c ${CMAKE_SOURCE_DIR}/remote-curl.c)\n \ttarget_link_libraries(git-remote-http http_obj common-main ${CURL_LIBRARIES} )\n \n \tif(EXPAT_FOUND)\n@@ -1201,7 +1202,7 @@ string(REPLACE \"@USE_LIBPCRE2@\" \"\" git_build_options \"${git_build_options}\")\n string(REPLACE \"@WITH_BREAKING_CHANGES@\" \"\" git_build_options \"${git_build_options}\")\n string(REPLACE \"@X@\" \"${EXE_EXTENSION}\" git_build_options \"${git_build_options}\")\n if(USE_VCPKG)\n-\tstring(APPEND git_build_options \"PATH=\\\"$PATH:$TEST_DIRECTORY/../compat/vcbuild/vcpkg/installed/x64-windows/bin\\\"\\n\")\n+\tstring(APPEND git_build_options \"PATH=\\\"$PATH:$TEST_DIRECTORY/../lib/compat/vcbuild/vcpkg/installed/x64-windows/bin\\\"\\n\")\n endif()\n file(WRITE ${CMAKE_BINARY_DIR}/GIT-BUILD-OPTIONS ${git_build_options})\n \ndiff --git a/git.rc.in b/git.rc.in\nindex e69444eef3..87cdefd50b 100644\n--- a/git.rc.in\n+++ b/git.rc.in\n@@ -21,4 +21,4 @@ BEGIN\n   END\n END\n \n-1 RT_MANIFEST \"compat/win32/git.manifest\"\n+1 RT_MANIFEST \"lib/compat/win32/git.manifest\"\ndiff --git a/abspath.c b/lib/abspath.c\nsimilarity index 100%\nrename from abspath.c\nrename to lib/abspath.c\ndiff --git a/abspath.h b/lib/abspath.h\nsimilarity index 100%\nrename from abspath.h\nrename to lib/abspath.h\ndiff --git a/add-interactive.c b/lib/add-interactive.c\nsimilarity index 100%\nrename from add-interactive.c\nrename to lib/add-interactive.c\ndiff --git a/add-interactive.h b/lib/add-interactive.h\nsimilarity index 100%\nrename from add-interactive.h\nrename to lib/add-interactive.h\ndiff --git a/add-patch.c b/lib/add-patch.c\nsimilarity index 100%\nrename from add-patch.c\nrename to lib/add-patch.c\ndiff --git a/add-patch.h b/lib/add-patch.h\nsimilarity index 100%\nrename from add-patch.h\nrename to lib/add-patch.h\ndiff --git a/advice.c b/lib/advice.c\nsimilarity index 100%\nrename from advice.c\nrename to lib/advice.c\ndiff --git a/advice.h b/lib/advice.h\nsimilarity index 100%\nrename from advice.h\nrename to lib/advice.h\ndiff --git a/alias.c b/lib/alias.c\nsimilarity index 100%\nrename from alias.c\nrename to lib/alias.c\ndiff --git a/alias.h b/lib/alias.h\nsimilarity index 100%\nrename from alias.h\nrename to lib/alias.h\ndiff --git a/alloc.c b/lib/alloc.c\nsimilarity index 100%\nrename from alloc.c\nrename to lib/alloc.c\ndiff --git a/alloc.h b/lib/alloc.h\nsimilarity index 100%\nrename from alloc.h\nrename to lib/alloc.h\ndiff --git a/apply.c b/lib/apply.c\nsimilarity index 100%\nrename from apply.c\nrename to lib/apply.c\ndiff --git a/apply.h b/lib/apply.h\nsimilarity index 100%\nrename from apply.h\nrename to lib/apply.h\ndiff --git a/archive-tar.c b/lib/archive-tar.c\nsimilarity index 100%\nrename from archive-tar.c\nrename to lib/archive-tar.c\ndiff --git a/archive-zip.c b/lib/archive-zip.c\nsimilarity index 100%\nrename from archive-zip.c\nrename to lib/archive-zip.c\ndiff --git a/archive.c b/lib/archive.c\nsimilarity index 100%\nrename from archive.c\nrename to lib/archive.c\ndiff --git a/archive.h b/lib/archive.h\nsimilarity index 100%\nrename from archive.h\nrename to lib/archive.h\ndiff --git a/attr.c b/lib/attr.c\nsimilarity index 100%\nrename from attr.c\nrename to lib/attr.c\ndiff --git a/attr.h b/lib/attr.h\nsimilarity index 100%\nrename from attr.h\nrename to lib/attr.h\ndiff --git a/banned.h b/lib/banned.h\nsimilarity index 100%\nrename from banned.h\nrename to lib/banned.h\ndiff --git a/base85.c b/lib/base85.c\nsimilarity index 100%\nrename from base85.c\nrename to lib/base85.c\ndiff --git a/base85.h b/lib/base85.h\nsimilarity index 100%\nrename from base85.h\nrename to lib/base85.h\ndiff --git a/bisect.c b/lib/bisect.c\nsimilarity index 100%\nrename from bisect.c\nrename to lib/bisect.c\ndiff --git a/bisect.h b/lib/bisect.h\nsimilarity index 100%\nrename from bisect.h\nrename to lib/bisect.h\ndiff --git a/blame.c b/lib/blame.c\nsimilarity index 100%\nrename from blame.c\nrename to lib/blame.c\ndiff --git a/blame.h b/lib/blame.h\nsimilarity index 100%\nrename from blame.h\nrename to lib/blame.h\ndiff --git a/blob.c b/lib/blob.c\nsimilarity index 100%\nrename from blob.c\nrename to lib/blob.c\ndiff --git a/blob.h b/lib/blob.h\nsimilarity index 100%\nrename from blob.h\nrename to lib/blob.h\ndiff --git a/block-sha1/sha1.c b/lib/block-sha1/sha1.c\nsimilarity index 100%\nrename from block-sha1/sha1.c\nrename to lib/block-sha1/sha1.c\ndiff --git a/block-sha1/sha1.h b/lib/block-sha1/sha1.h\nsimilarity index 100%\nrename from block-sha1/sha1.h\nrename to lib/block-sha1/sha1.h\ndiff --git a/bloom.c b/lib/bloom.c\nsimilarity index 100%\nrename from bloom.c\nrename to lib/bloom.c\ndiff --git a/bloom.h b/lib/bloom.h\nsimilarity index 100%\nrename from bloom.h\nrename to lib/bloom.h\ndiff --git a/branch.c b/lib/branch.c\nsimilarity index 100%\nrename from branch.c\nrename to lib/branch.c\ndiff --git a/branch.h b/lib/branch.h\nsimilarity index 100%\nrename from branch.h\nrename to lib/branch.h\ndiff --git a/builtin.h b/lib/builtin.h\nsimilarity index 100%\nrename from builtin.h\nrename to lib/builtin.h\ndiff --git a/bundle-uri.c b/lib/bundle-uri.c\nsimilarity index 100%\nrename from bundle-uri.c\nrename to lib/bundle-uri.c\ndiff --git a/bundle-uri.h b/lib/bundle-uri.h\nsimilarity index 100%\nrename from bundle-uri.h\nrename to lib/bundle-uri.h\ndiff --git a/bundle.c b/lib/bundle.c\nsimilarity index 100%\nrename from bundle.c\nrename to lib/bundle.c\ndiff --git a/bundle.h b/lib/bundle.h\nsimilarity index 100%\nrename from bundle.h\nrename to lib/bundle.h\ndiff --git a/cache-tree.c b/lib/cache-tree.c\nsimilarity index 100%\nrename from cache-tree.c\nrename to lib/cache-tree.c\ndiff --git a/cache-tree.h b/lib/cache-tree.h\nsimilarity index 100%\nrename from cache-tree.h\nrename to lib/cache-tree.h\ndiff --git a/cbtree.c b/lib/cbtree.c\nsimilarity index 100%\nrename from cbtree.c\nrename to lib/cbtree.c\ndiff --git a/cbtree.h b/lib/cbtree.h\nsimilarity index 100%\nrename from cbtree.h\nrename to lib/cbtree.h\ndiff --git a/chdir-notify.c b/lib/chdir-notify.c\nsimilarity index 100%\nrename from chdir-notify.c\nrename to lib/chdir-notify.c\ndiff --git a/chdir-notify.h b/lib/chdir-notify.h\nsimilarity index 100%\nrename from chdir-notify.h\nrename to lib/chdir-notify.h\ndiff --git a/checkout.c b/lib/checkout.c\nsimilarity index 100%\nrename from checkout.c\nrename to lib/checkout.c\ndiff --git a/checkout.h b/lib/checkout.h\nsimilarity index 100%\nrename from checkout.h\nrename to lib/checkout.h\ndiff --git a/chunk-format.c b/lib/chunk-format.c\nsimilarity index 100%\nrename from chunk-format.c\nrename to lib/chunk-format.c\ndiff --git a/chunk-format.h b/lib/chunk-format.h\nsimilarity index 100%\nrename from chunk-format.h\nrename to lib/chunk-format.h\ndiff --git a/color.c b/lib/color.c\nsimilarity index 100%\nrename from color.c\nrename to lib/color.c\ndiff --git a/color.h b/lib/color.h\nsimilarity index 100%\nrename from color.h\nrename to lib/color.h\ndiff --git a/column.c b/lib/column.c\nsimilarity index 100%\nrename from column.c\nrename to lib/column.c\ndiff --git a/column.h b/lib/column.h\nsimilarity index 100%\nrename from column.h\nrename to lib/column.h\ndiff --git a/combine-diff.c b/lib/combine-diff.c\nsimilarity index 100%\nrename from combine-diff.c\nrename to lib/combine-diff.c\ndiff --git a/commit-graph.c b/lib/commit-graph.c\nsimilarity index 100%\nrename from commit-graph.c\nrename to lib/commit-graph.c\ndiff --git a/commit-graph.h b/lib/commit-graph.h\nsimilarity index 100%\nrename from commit-graph.h\nrename to lib/commit-graph.h\ndiff --git a/commit-reach.c b/lib/commit-reach.c\nsimilarity index 100%\nrename from commit-reach.c\nrename to lib/commit-reach.c\ndiff --git a/commit-reach.h b/lib/commit-reach.h\nsimilarity index 100%\nrename from commit-reach.h\nrename to lib/commit-reach.h\ndiff --git a/commit-slab-decl.h b/lib/commit-slab-decl.h\nsimilarity index 100%\nrename from commit-slab-decl.h\nrename to lib/commit-slab-decl.h\ndiff --git a/commit-slab-impl.h b/lib/commit-slab-impl.h\nsimilarity index 100%\nrename from commit-slab-impl.h\nrename to lib/commit-slab-impl.h\ndiff --git a/commit-slab.h b/lib/commit-slab.h\nsimilarity index 100%\nrename from commit-slab.h\nrename to lib/commit-slab.h\ndiff --git a/commit.c b/lib/commit.c\nsimilarity index 100%\nrename from commit.c\nrename to lib/commit.c\ndiff --git a/commit.h b/lib/commit.h\nsimilarity index 100%\nrename from commit.h\nrename to lib/commit.h\ndiff --git a/common-exit.c b/lib/common-exit.c\nsimilarity index 100%\nrename from common-exit.c\nrename to lib/common-exit.c\ndiff --git a/common-init.c b/lib/common-init.c\nsimilarity index 100%\nrename from common-init.c\nrename to lib/common-init.c\ndiff --git a/common-init.h b/lib/common-init.h\nsimilarity index 100%\nrename from common-init.h\nrename to lib/common-init.h\ndiff --git a/compat/.gitattributes b/lib/compat/.gitattributes\nsimilarity index 100%\nrename from compat/.gitattributes\nrename to lib/compat/.gitattributes\ndiff --git a/compat/access.c b/lib/compat/access.c\nsimilarity index 100%\nrename from compat/access.c\nrename to lib/compat/access.c\ndiff --git a/compat/apple-common-crypto.h b/lib/compat/apple-common-crypto.h\nsimilarity index 100%\nrename from compat/apple-common-crypto.h\nrename to lib/compat/apple-common-crypto.h\ndiff --git a/compat/basename.c b/lib/compat/basename.c\nsimilarity index 100%\nrename from compat/basename.c\nrename to lib/compat/basename.c\ndiff --git a/compat/bswap.h b/lib/compat/bswap.h\nsimilarity index 100%\nrename from compat/bswap.h\nrename to lib/compat/bswap.h\ndiff --git a/compat/compiler.h b/lib/compat/compiler.h\nsimilarity index 100%\nrename from compat/compiler.h\nrename to lib/compat/compiler.h\ndiff --git a/compat/darwin/procinfo.c b/lib/compat/darwin/procinfo.c\nsimilarity index 100%\nrename from compat/darwin/procinfo.c\nrename to lib/compat/darwin/procinfo.c\ndiff --git a/compat/disk.h b/lib/compat/disk.h\nsimilarity index 100%\nrename from compat/disk.h\nrename to lib/compat/disk.h\ndiff --git a/compat/fileno.c b/lib/compat/fileno.c\nsimilarity index 100%\nrename from compat/fileno.c\nrename to lib/compat/fileno.c\ndiff --git a/compat/fopen.c b/lib/compat/fopen.c\nsimilarity index 100%\nrename from compat/fopen.c\nrename to lib/compat/fopen.c\ndiff --git a/compat/fsmonitor/fsm-darwin-gcc.h b/lib/compat/fsmonitor/fsm-darwin-gcc.h\nsimilarity index 100%\nrename from compat/fsmonitor/fsm-darwin-gcc.h\nrename to lib/compat/fsmonitor/fsm-darwin-gcc.h\ndiff --git a/compat/fsmonitor/fsm-health-darwin.c b/lib/compat/fsmonitor/fsm-health-darwin.c\nsimilarity index 100%\nrename from compat/fsmonitor/fsm-health-darwin.c\nrename to lib/compat/fsmonitor/fsm-health-darwin.c\ndiff --git a/compat/fsmonitor/fsm-health-linux.c b/lib/compat/fsmonitor/fsm-health-linux.c\nsimilarity index 100%\nrename from compat/fsmonitor/fsm-health-linux.c\nrename to lib/compat/fsmonitor/fsm-health-linux.c\ndiff --git a/compat/fsmonitor/fsm-health-win32.c b/lib/compat/fsmonitor/fsm-health-win32.c\nsimilarity index 100%\nrename from compat/fsmonitor/fsm-health-win32.c\nrename to lib/compat/fsmonitor/fsm-health-win32.c\ndiff --git a/compat/fsmonitor/fsm-health.h b/lib/compat/fsmonitor/fsm-health.h\nsimilarity index 100%\nrename from compat/fsmonitor/fsm-health.h\nrename to lib/compat/fsmonitor/fsm-health.h\ndiff --git a/compat/fsmonitor/fsm-ipc-unix.c b/lib/compat/fsmonitor/fsm-ipc-unix.c\nsimilarity index 100%\nrename from compat/fsmonitor/fsm-ipc-unix.c\nrename to lib/compat/fsmonitor/fsm-ipc-unix.c\ndiff --git a/compat/fsmonitor/fsm-ipc-win32.c b/lib/compat/fsmonitor/fsm-ipc-win32.c\nsimilarity index 100%\nrename from compat/fsmonitor/fsm-ipc-win32.c\nrename to lib/compat/fsmonitor/fsm-ipc-win32.c\ndiff --git a/compat/fsmonitor/fsm-listen-darwin.c b/lib/compat/fsmonitor/fsm-listen-darwin.c\nsimilarity index 100%\nrename from compat/fsmonitor/fsm-listen-darwin.c\nrename to lib/compat/fsmonitor/fsm-listen-darwin.c\ndiff --git a/compat/fsmonitor/fsm-listen-linux.c b/lib/compat/fsmonitor/fsm-listen-linux.c\nsimilarity index 100%\nrename from compat/fsmonitor/fsm-listen-linux.c\nrename to lib/compat/fsmonitor/fsm-listen-linux.c\ndiff --git a/compat/fsmonitor/fsm-listen-win32.c b/lib/compat/fsmonitor/fsm-listen-win32.c\nsimilarity index 100%\nrename from compat/fsmonitor/fsm-listen-win32.c\nrename to lib/compat/fsmonitor/fsm-listen-win32.c\ndiff --git a/compat/fsmonitor/fsm-listen.h b/lib/compat/fsmonitor/fsm-listen.h\nsimilarity index 100%\nrename from compat/fsmonitor/fsm-listen.h\nrename to lib/compat/fsmonitor/fsm-listen.h\ndiff --git a/compat/fsmonitor/fsm-path-utils-darwin.c b/lib/compat/fsmonitor/fsm-path-utils-darwin.c\nsimilarity index 100%\nrename from compat/fsmonitor/fsm-path-utils-darwin.c\nrename to lib/compat/fsmonitor/fsm-path-utils-darwin.c\ndiff --git a/compat/fsmonitor/fsm-path-utils-linux.c b/lib/compat/fsmonitor/fsm-path-utils-linux.c\nsimilarity index 100%\nrename from compat/fsmonitor/fsm-path-utils-linux.c\nrename to lib/compat/fsmonitor/fsm-path-utils-linux.c\ndiff --git a/compat/fsmonitor/fsm-path-utils-win32.c b/lib/compat/fsmonitor/fsm-path-utils-win32.c\nsimilarity index 100%\nrename from compat/fsmonitor/fsm-path-utils-win32.c\nrename to lib/compat/fsmonitor/fsm-path-utils-win32.c\ndiff --git a/compat/fsmonitor/fsm-settings-unix.c b/lib/compat/fsmonitor/fsm-settings-unix.c\nsimilarity index 100%\nrename from compat/fsmonitor/fsm-settings-unix.c\nrename to lib/compat/fsmonitor/fsm-settings-unix.c\ndiff --git a/compat/fsmonitor/fsm-settings-win32.c b/lib/compat/fsmonitor/fsm-settings-win32.c\nsimilarity index 100%\nrename from compat/fsmonitor/fsm-settings-win32.c\nrename to lib/compat/fsmonitor/fsm-settings-win32.c\ndiff --git a/compat/hstrerror.c b/lib/compat/hstrerror.c\nsimilarity index 100%\nrename from compat/hstrerror.c\nrename to lib/compat/hstrerror.c\ndiff --git a/compat/inet_ntop.c b/lib/compat/inet_ntop.c\nsimilarity index 100%\nrename from compat/inet_ntop.c\nrename to lib/compat/inet_ntop.c\ndiff --git a/compat/inet_pton.c b/lib/compat/inet_pton.c\nsimilarity index 100%\nrename from compat/inet_pton.c\nrename to lib/compat/inet_pton.c\ndiff --git a/compat/linux/procinfo.c b/lib/compat/linux/procinfo.c\nsimilarity index 100%\nrename from compat/linux/procinfo.c\nrename to lib/compat/linux/procinfo.c\ndiff --git a/compat/memmem.c b/lib/compat/memmem.c\nsimilarity index 100%\nrename from compat/memmem.c\nrename to lib/compat/memmem.c\ndiff --git a/compat/mingw-posix.h b/lib/compat/mingw-posix.h\nsimilarity index 100%\nrename from compat/mingw-posix.h\nrename to lib/compat/mingw-posix.h\ndiff --git a/compat/mingw.c b/lib/compat/mingw.c\nsimilarity index 100%\nrename from compat/mingw.c\nrename to lib/compat/mingw.c\ndiff --git a/compat/mingw.h b/lib/compat/mingw.h\nsimilarity index 100%\nrename from compat/mingw.h\nrename to lib/compat/mingw.h\ndiff --git a/compat/mkdir.c b/lib/compat/mkdir.c\nsimilarity index 100%\nrename from compat/mkdir.c\nrename to lib/compat/mkdir.c\ndiff --git a/compat/mmap.c b/lib/compat/mmap.c\nsimilarity index 100%\nrename from compat/mmap.c\nrename to lib/compat/mmap.c\ndiff --git a/compat/msvc-posix.h b/lib/compat/msvc-posix.h\nsimilarity index 100%\nrename from compat/msvc-posix.h\nrename to lib/compat/msvc-posix.h\ndiff --git a/compat/msvc.c b/lib/compat/msvc.c\nsimilarity index 100%\nrename from compat/msvc.c\nrename to lib/compat/msvc.c\ndiff --git a/compat/msvc.h b/lib/compat/msvc.h\nsimilarity index 100%\nrename from compat/msvc.h\nrename to lib/compat/msvc.h\ndiff --git a/compat/nonblock.c b/lib/compat/nonblock.c\nsimilarity index 100%\nrename from compat/nonblock.c\nrename to lib/compat/nonblock.c\ndiff --git a/compat/nonblock.h b/lib/compat/nonblock.h\nsimilarity index 100%\nrename from compat/nonblock.h\nrename to lib/compat/nonblock.h\ndiff --git a/compat/obstack.c b/lib/compat/obstack.c\nsimilarity index 100%\nrename from compat/obstack.c\nrename to lib/compat/obstack.c\ndiff --git a/compat/obstack.h b/lib/compat/obstack.h\nsimilarity index 100%\nrename from compat/obstack.h\nrename to lib/compat/obstack.h\ndiff --git a/compat/open.c b/lib/compat/open.c\nsimilarity index 100%\nrename from compat/open.c\nrename to lib/compat/open.c\ndiff --git a/compat/poll/poll.c b/lib/compat/poll/poll.c\nsimilarity index 100%\nrename from compat/poll/poll.c\nrename to lib/compat/poll/poll.c\ndiff --git a/compat/poll/poll.h b/lib/compat/poll/poll.h\nsimilarity index 100%\nrename from compat/poll/poll.h\nrename to lib/compat/poll/poll.h\ndiff --git a/compat/posix.h b/lib/compat/posix.h\nsimilarity index 100%\nrename from compat/posix.h\nrename to lib/compat/posix.h\ndiff --git a/compat/pread.c b/lib/compat/pread.c\nsimilarity index 100%\nrename from compat/pread.c\nrename to lib/compat/pread.c\ndiff --git a/compat/precompose_utf8.c b/lib/compat/precompose_utf8.c\nsimilarity index 100%\nrename from compat/precompose_utf8.c\nrename to lib/compat/precompose_utf8.c\ndiff --git a/compat/precompose_utf8.h b/lib/compat/precompose_utf8.h\nsimilarity index 100%\nrename from compat/precompose_utf8.h\nrename to lib/compat/precompose_utf8.h\ndiff --git a/compat/qsort_s.c b/lib/compat/qsort_s.c\nsimilarity index 100%\nrename from compat/qsort_s.c\nrename to lib/compat/qsort_s.c\ndiff --git a/compat/regcomp_enhanced.c b/lib/compat/regcomp_enhanced.c\nsimilarity index 100%\nrename from compat/regcomp_enhanced.c\nrename to lib/compat/regcomp_enhanced.c\ndiff --git a/compat/regex/regcomp.c b/lib/compat/regex/regcomp.c\nsimilarity index 100%\nrename from compat/regex/regcomp.c\nrename to lib/compat/regex/regcomp.c\ndiff --git a/compat/regex/regex.c b/lib/compat/regex/regex.c\nsimilarity index 100%\nrename from compat/regex/regex.c\nrename to lib/compat/regex/regex.c\ndiff --git a/compat/regex/regex.h b/lib/compat/regex/regex.h\nsimilarity index 100%\nrename from compat/regex/regex.h\nrename to lib/compat/regex/regex.h\ndiff --git a/compat/regex/regex_internal.c b/lib/compat/regex/regex_internal.c\nsimilarity index 100%\nrename from compat/regex/regex_internal.c\nrename to lib/compat/regex/regex_internal.c\ndiff --git a/compat/regex/regex_internal.h b/lib/compat/regex/regex_internal.h\nsimilarity index 100%\nrename from compat/regex/regex_internal.h\nrename to lib/compat/regex/regex_internal.h\ndiff --git a/compat/regex/regexec.c b/lib/compat/regex/regexec.c\nsimilarity index 100%\nrename from compat/regex/regexec.c\nrename to lib/compat/regex/regexec.c\ndiff --git a/compat/setenv.c b/lib/compat/setenv.c\nsimilarity index 100%\nrename from compat/setenv.c\nrename to lib/compat/setenv.c\ndiff --git a/compat/sha1-chunked.c b/lib/compat/sha1-chunked.c\nsimilarity index 100%\nrename from compat/sha1-chunked.c\nrename to lib/compat/sha1-chunked.c\ndiff --git a/compat/sha1-chunked.h b/lib/compat/sha1-chunked.h\nsimilarity index 100%\nrename from compat/sha1-chunked.h\nrename to lib/compat/sha1-chunked.h\ndiff --git a/compat/simple-ipc/ipc-shared.c b/lib/compat/simple-ipc/ipc-shared.c\nsimilarity index 100%\nrename from compat/simple-ipc/ipc-shared.c\nrename to lib/compat/simple-ipc/ipc-shared.c\ndiff --git a/compat/simple-ipc/ipc-unix-socket.c b/lib/compat/simple-ipc/ipc-unix-socket.c\nsimilarity index 100%\nrename from compat/simple-ipc/ipc-unix-socket.c\nrename to lib/compat/simple-ipc/ipc-unix-socket.c\ndiff --git a/compat/simple-ipc/ipc-win32.c b/lib/compat/simple-ipc/ipc-win32.c\nsimilarity index 100%\nrename from compat/simple-ipc/ipc-win32.c\nrename to lib/compat/simple-ipc/ipc-win32.c\ndiff --git a/compat/snprintf.c b/lib/compat/snprintf.c\nsimilarity index 100%\nrename from compat/snprintf.c\nrename to lib/compat/snprintf.c\ndiff --git a/compat/stat.c b/lib/compat/stat.c\nsimilarity index 100%\nrename from compat/stat.c\nrename to lib/compat/stat.c\ndiff --git a/compat/strcasestr.c b/lib/compat/strcasestr.c\nsimilarity index 100%\nrename from compat/strcasestr.c\nrename to lib/compat/strcasestr.c\ndiff --git a/compat/strdup.c b/lib/compat/strdup.c\nsimilarity index 100%\nrename from compat/strdup.c\nrename to lib/compat/strdup.c\ndiff --git a/compat/strlcpy.c b/lib/compat/strlcpy.c\nsimilarity index 100%\nrename from compat/strlcpy.c\nrename to lib/compat/strlcpy.c\ndiff --git a/compat/strtoimax.c b/lib/compat/strtoimax.c\nsimilarity index 100%\nrename from compat/strtoimax.c\nrename to lib/compat/strtoimax.c\ndiff --git a/compat/strtoumax.c b/lib/compat/strtoumax.c\nsimilarity index 100%\nrename from compat/strtoumax.c\nrename to lib/compat/strtoumax.c\ndiff --git a/compat/stub/procinfo.c b/lib/compat/stub/procinfo.c\nsimilarity index 100%\nrename from compat/stub/procinfo.c\nrename to lib/compat/stub/procinfo.c\ndiff --git a/compat/terminal.c b/lib/compat/terminal.c\nsimilarity index 100%\nrename from compat/terminal.c\nrename to lib/compat/terminal.c\ndiff --git a/compat/terminal.h b/lib/compat/terminal.h\nsimilarity index 100%\nrename from compat/terminal.h\nrename to lib/compat/terminal.h\ndiff --git a/compat/unsetenv.c b/lib/compat/unsetenv.c\nsimilarity index 100%\nrename from compat/unsetenv.c\nrename to lib/compat/unsetenv.c\ndiff --git a/compat/vcbuild/.gitignore b/lib/compat/vcbuild/.gitignore\nsimilarity index 100%\nrename from compat/vcbuild/.gitignore\nrename to lib/compat/vcbuild/.gitignore\ndiff --git a/compat/vcbuild/README b/lib/compat/vcbuild/README\nsimilarity index 94%\nrename from compat/vcbuild/README\nrename to lib/compat/vcbuild/README\nindex 29ec1d0f10..63ee00a4ef 100644\n--- a/compat/vcbuild/README\n+++ b/lib/compat/vcbuild/README\n@@ -6,17 +6,17 @@ The Steps to Build Git with VS2015 or VS2017 from the command line.\n    Prompt or from an SDK bash window:\n \n    $ cd <repo_root>\n-   $ ./compat/vcbuild/vcpkg_install.bat\n+   $ ./lib/compat/vcbuild/vcpkg_install.bat\n \n    The vcpkg tools and all of the third-party sources will be installed\n    in this folder:\n-      <repo_root>/compat/vcbuild/vcpkg/\n+      <repo_root>/lib/compat/vcbuild/vcpkg/\n \n    A file will be created with a set of Makefile macros pointing to a\n    unified \"include\", \"lib\", and \"bin\" directory (release and debug) for\n    all of the required packages.  This file will be included by the main\n    Makefile:\n-      <repo_root>/compat/vcbuild/MSVC-DEFS-GEN\n+      <repo_root>/lib/compat/vcbuild/MSVC-DEFS-GEN\n \n 2. OPTIONALLY copy the third-party *.dll and *.pdb files into the repo\n    root to make it easier to run and debug git.exe without having to\n@@ -26,8 +26,8 @@ The Steps to Build Git with VS2015 or VS2017 from the command line.\n    Use ONE of the following forms which should match how you want to\n    compile git.exe.\n \n-   $ ./compat/vcbuild/vcpkg_copy_dlls.bat debug\n-   $ ./compat/vcbuild/vcpkg_copy_dlls.bat release\n+   $ ./lib/compat/vcbuild/vcpkg_copy_dlls.bat debug\n+   $ ./lib/compat/vcbuild/vcpkg_copy_dlls.bat release\n \n 3. Build git using MSVC from an SDK bash window using one of the\n    following commands:\ndiff --git a/compat/vcbuild/find_vs_env.bat b/lib/compat/vcbuild/find_vs_env.bat\nsimilarity index 98%\nrename from compat/vcbuild/find_vs_env.bat\nrename to lib/compat/vcbuild/find_vs_env.bat\nindex b35d264c0e..30e884b3d7 100644\n--- a/compat/vcbuild/find_vs_env.bat\n+++ b/lib/compat/vcbuild/find_vs_env.bat\n@@ -25,7 +25,7 @@ REM\n REM The output of this script should be written to a make \"include\n REM file\" and referenced by the top-level Makefile.\n REM\n-REM See \"config.mak.uname\" (look for compat/vcbuild/MSVC-DEFS-GEN).\n+REM See \"config.mak.uname\" (look for lib/compat/vcbuild/MSVC-DEFS-GEN).\n REM ================================================================\n REM The provided command prompts are custom to each VS release and\n REM filled with lots of internal knowledge (such as Registry settings);\ndiff --git a/compat/vcbuild/include/sys/param.h b/lib/compat/vcbuild/include/sys/param.h\nsimilarity index 100%\nrename from compat/vcbuild/include/sys/param.h\nrename to lib/compat/vcbuild/include/sys/param.h\ndiff --git a/compat/vcbuild/include/sys/time.h b/lib/compat/vcbuild/include/sys/time.h\nsimilarity index 100%\nrename from compat/vcbuild/include/sys/time.h\nrename to lib/compat/vcbuild/include/sys/time.h\ndiff --git a/compat/vcbuild/include/sys/utime.h b/lib/compat/vcbuild/include/sys/utime.h\nsimilarity index 100%\nrename from compat/vcbuild/include/sys/utime.h\nrename to lib/compat/vcbuild/include/sys/utime.h\ndiff --git a/compat/vcbuild/include/unistd.h b/lib/compat/vcbuild/include/unistd.h\nsimilarity index 100%\nrename from compat/vcbuild/include/unistd.h\nrename to lib/compat/vcbuild/include/unistd.h\ndiff --git a/compat/vcbuild/include/utime.h b/lib/compat/vcbuild/include/utime.h\nsimilarity index 100%\nrename from compat/vcbuild/include/utime.h\nrename to lib/compat/vcbuild/include/utime.h\ndiff --git a/compat/vcbuild/scripts/clink.pl b/lib/compat/vcbuild/scripts/clink.pl\nsimilarity index 100%\nrename from compat/vcbuild/scripts/clink.pl\nrename to lib/compat/vcbuild/scripts/clink.pl\ndiff --git a/compat/vcbuild/scripts/lib.pl b/lib/compat/vcbuild/scripts/lib.pl\nsimilarity index 100%\nrename from compat/vcbuild/scripts/lib.pl\nrename to lib/compat/vcbuild/scripts/lib.pl\ndiff --git a/compat/vcbuild/vcpkg_copy_dlls.bat b/lib/compat/vcbuild/vcpkg_copy_dlls.bat\nsimilarity index 100%\nrename from compat/vcbuild/vcpkg_copy_dlls.bat\nrename to lib/compat/vcbuild/vcpkg_copy_dlls.bat\ndiff --git a/compat/vcbuild/vcpkg_install.bat b/lib/compat/vcbuild/vcpkg_install.bat\nsimilarity index 95%\nrename from compat/vcbuild/vcpkg_install.bat\nrename to lib/compat/vcbuild/vcpkg_install.bat\nindex ebd0bad242..64c1b199e0 100644\n--- a/compat/vcbuild/vcpkg_install.bat\n+++ b/lib/compat/vcbuild/vcpkg_install.bat\n@@ -5,10 +5,10 @@ REM it to build the third-party libraries that git requires when it\n REM is built using MSVC.\n REM\n REM [1] Install VCPKG.\n-REM     [a] Create <root>/compat/vcbuild/vcpkg/\n+REM     [a] Create <root>/lib/compat/vcbuild/vcpkg/\n REM     [b] Download \"vcpkg\".\n REM     [c] Compile using the currently installed version of VS.\n-REM     [d] Create <root>/compat/vcbuild/vcpkg/vcpkg.exe\n+REM     [d] Create <root>/lib/compat/vcbuild/vcpkg/vcpkg.exe\n REM\n REM [2] Install third-party libraries.\n REM     [a] Download each (which may also install CMAKE).\ndiff --git a/compat/win32.h b/lib/compat/win32.h\nsimilarity index 100%\nrename from compat/win32.h\nrename to lib/compat/win32.h\ndiff --git a/compat/win32/alloca.h b/lib/compat/win32/alloca.h\nsimilarity index 100%\nrename from compat/win32/alloca.h\nrename to lib/compat/win32/alloca.h\ndiff --git a/compat/win32/dirent.c b/lib/compat/win32/dirent.c\nsimilarity index 100%\nrename from compat/win32/dirent.c\nrename to lib/compat/win32/dirent.c\ndiff --git a/compat/win32/dirent.h b/lib/compat/win32/dirent.h\nsimilarity index 100%\nrename from compat/win32/dirent.h\nrename to lib/compat/win32/dirent.h\ndiff --git a/compat/win32/exit-process.h b/lib/compat/win32/exit-process.h\nsimilarity index 100%\nrename from compat/win32/exit-process.h\nrename to lib/compat/win32/exit-process.h\ndiff --git a/compat/win32/flush.c b/lib/compat/win32/flush.c\nsimilarity index 100%\nrename from compat/win32/flush.c\nrename to lib/compat/win32/flush.c\ndiff --git a/compat/win32/git.manifest b/lib/compat/win32/git.manifest\nsimilarity index 100%\nrename from compat/win32/git.manifest\nrename to lib/compat/win32/git.manifest\ndiff --git a/compat/win32/headless.c b/lib/compat/win32/headless.c\nsimilarity index 100%\nrename from compat/win32/headless.c\nrename to lib/compat/win32/headless.c\ndiff --git a/compat/win32/lazyload.h b/lib/compat/win32/lazyload.h\nsimilarity index 100%\nrename from compat/win32/lazyload.h\nrename to lib/compat/win32/lazyload.h\ndiff --git a/compat/win32/path-utils.c b/lib/compat/win32/path-utils.c\nsimilarity index 100%\nrename from compat/win32/path-utils.c\nrename to lib/compat/win32/path-utils.c\ndiff --git a/compat/win32/path-utils.h b/lib/compat/win32/path-utils.h\nsimilarity index 100%\nrename from compat/win32/path-utils.h\nrename to lib/compat/win32/path-utils.h\ndiff --git a/compat/win32/pthread.c b/lib/compat/win32/pthread.c\nsimilarity index 100%\nrename from compat/win32/pthread.c\nrename to lib/compat/win32/pthread.c\ndiff --git a/compat/win32/pthread.h b/lib/compat/win32/pthread.h\nsimilarity index 100%\nrename from compat/win32/pthread.h\nrename to lib/compat/win32/pthread.h\ndiff --git a/compat/win32/syslog.c b/lib/compat/win32/syslog.c\nsimilarity index 100%\nrename from compat/win32/syslog.c\nrename to lib/compat/win32/syslog.c\ndiff --git a/compat/win32/syslog.h b/lib/compat/win32/syslog.h\nsimilarity index 100%\nrename from compat/win32/syslog.h\nrename to lib/compat/win32/syslog.h\ndiff --git a/compat/win32/trace2_win32_process_info.c b/lib/compat/win32/trace2_win32_process_info.c\nsimilarity index 100%\nrename from compat/win32/trace2_win32_process_info.c\nrename to lib/compat/win32/trace2_win32_process_info.c\ndiff --git a/compat/win32mmap.c b/lib/compat/win32mmap.c\nsimilarity index 100%\nrename from compat/win32mmap.c\nrename to lib/compat/win32mmap.c\ndiff --git a/compat/winansi.c b/lib/compat/winansi.c\nsimilarity index 100%\nrename from compat/winansi.c\nrename to lib/compat/winansi.c\ndiff --git a/compat/zlib-compat.h b/lib/compat/zlib-compat.h\nsimilarity index 100%\nrename from compat/zlib-compat.h\nrename to lib/compat/zlib-compat.h\ndiff --git a/compiler-tricks/not-constant.c b/lib/compiler-tricks/not-constant.c\nsimilarity index 100%\nrename from compiler-tricks/not-constant.c\nrename to lib/compiler-tricks/not-constant.c\ndiff --git a/config.c b/lib/config.c\nsimilarity index 100%\nrename from config.c\nrename to lib/config.c\ndiff --git a/config.h b/lib/config.h\nsimilarity index 100%\nrename from config.h\nrename to lib/config.h\ndiff --git a/connect.c b/lib/connect.c\nsimilarity index 100%\nrename from connect.c\nrename to lib/connect.c\ndiff --git a/connect.h b/lib/connect.h\nsimilarity index 100%\nrename from connect.h\nrename to lib/connect.h\ndiff --git a/connected.c b/lib/connected.c\nsimilarity index 100%\nrename from connected.c\nrename to lib/connected.c\ndiff --git a/connected.h b/lib/connected.h\nsimilarity index 100%\nrename from connected.h\nrename to lib/connected.h\ndiff --git a/convert.c b/lib/convert.c\nsimilarity index 100%\nrename from convert.c\nrename to lib/convert.c\ndiff --git a/convert.h b/lib/convert.h\nsimilarity index 100%\nrename from convert.h\nrename to lib/convert.h\ndiff --git a/copy.c b/lib/copy.c\nsimilarity index 100%\nrename from copy.c\nrename to lib/copy.c\ndiff --git a/copy.h b/lib/copy.h\nsimilarity index 100%\nrename from copy.h\nrename to lib/copy.h\ndiff --git a/credential.c b/lib/credential.c\nsimilarity index 100%\nrename from credential.c\nrename to lib/credential.c\ndiff --git a/credential.h b/lib/credential.h\nsimilarity index 100%\nrename from credential.h\nrename to lib/credential.h\ndiff --git a/csum-file.c b/lib/csum-file.c\nsimilarity index 100%\nrename from csum-file.c\nrename to lib/csum-file.c\ndiff --git a/csum-file.h b/lib/csum-file.h\nsimilarity index 100%\nrename from csum-file.h\nrename to lib/csum-file.h\ndiff --git a/ctype.c b/lib/ctype.c\nsimilarity index 100%\nrename from ctype.c\nrename to lib/ctype.c\ndiff --git a/date.c b/lib/date.c\nsimilarity index 100%\nrename from date.c\nrename to lib/date.c\ndiff --git a/date.h b/lib/date.h\nsimilarity index 100%\nrename from date.h\nrename to lib/date.h\ndiff --git a/decorate.c b/lib/decorate.c\nsimilarity index 100%\nrename from decorate.c\nrename to lib/decorate.c\ndiff --git a/decorate.h b/lib/decorate.h\nsimilarity index 100%\nrename from decorate.h\nrename to lib/decorate.h\ndiff --git a/delta-islands.c b/lib/delta-islands.c\nsimilarity index 100%\nrename from delta-islands.c\nrename to lib/delta-islands.c\ndiff --git a/delta-islands.h b/lib/delta-islands.h\nsimilarity index 100%\nrename from delta-islands.h\nrename to lib/delta-islands.h\ndiff --git a/delta.h b/lib/delta.h\nsimilarity index 100%\nrename from delta.h\nrename to lib/delta.h\ndiff --git a/diagnose.c b/lib/diagnose.c\nsimilarity index 100%\nrename from diagnose.c\nrename to lib/diagnose.c\ndiff --git a/diagnose.h b/lib/diagnose.h\nsimilarity index 100%\nrename from diagnose.h\nrename to lib/diagnose.h\ndiff --git a/diff-delta.c b/lib/diff-delta.c\nsimilarity index 100%\nrename from diff-delta.c\nrename to lib/diff-delta.c\ndiff --git a/diff-lib.c b/lib/diff-lib.c\nsimilarity index 100%\nrename from diff-lib.c\nrename to lib/diff-lib.c\ndiff --git a/diff-merges.c b/lib/diff-merges.c\nsimilarity index 100%\nrename from diff-merges.c\nrename to lib/diff-merges.c\ndiff --git a/diff-merges.h b/lib/diff-merges.h\nsimilarity index 100%\nrename from diff-merges.h\nrename to lib/diff-merges.h\ndiff --git a/diff-no-index.c b/lib/diff-no-index.c\nsimilarity index 100%\nrename from diff-no-index.c\nrename to lib/diff-no-index.c\ndiff --git a/diff.c b/lib/diff.c\nsimilarity index 100%\nrename from diff.c\nrename to lib/diff.c\ndiff --git a/diff.h b/lib/diff.h\nsimilarity index 100%\nrename from diff.h\nrename to lib/diff.h\ndiff --git a/diffcore-break.c b/lib/diffcore-break.c\nsimilarity index 100%\nrename from diffcore-break.c\nrename to lib/diffcore-break.c\ndiff --git a/diffcore-delta.c b/lib/diffcore-delta.c\nsimilarity index 100%\nrename from diffcore-delta.c\nrename to lib/diffcore-delta.c\ndiff --git a/diffcore-order.c b/lib/diffcore-order.c\nsimilarity index 100%\nrename from diffcore-order.c\nrename to lib/diffcore-order.c\ndiff --git a/diffcore-pickaxe.c b/lib/diffcore-pickaxe.c\nsimilarity index 100%\nrename from diffcore-pickaxe.c\nrename to lib/diffcore-pickaxe.c\ndiff --git a/diffcore-rename.c b/lib/diffcore-rename.c\nsimilarity index 100%\nrename from diffcore-rename.c\nrename to lib/diffcore-rename.c\ndiff --git a/diffcore-rotate.c b/lib/diffcore-rotate.c\nsimilarity index 100%\nrename from diffcore-rotate.c\nrename to lib/diffcore-rotate.c\ndiff --git a/diffcore.h b/lib/diffcore.h\nsimilarity index 100%\nrename from diffcore.h\nrename to lib/diffcore.h\ndiff --git a/dir-iterator.c b/lib/dir-iterator.c\nsimilarity index 100%\nrename from dir-iterator.c\nrename to lib/dir-iterator.c\ndiff --git a/dir-iterator.h b/lib/dir-iterator.h\nsimilarity index 100%\nrename from dir-iterator.h\nrename to lib/dir-iterator.h\ndiff --git a/dir.c b/lib/dir.c\nsimilarity index 100%\nrename from dir.c\nrename to lib/dir.c\ndiff --git a/dir.h b/lib/dir.h\nsimilarity index 100%\nrename from dir.h\nrename to lib/dir.h\ndiff --git a/editor.c b/lib/editor.c\nsimilarity index 100%\nrename from editor.c\nrename to lib/editor.c\ndiff --git a/editor.h b/lib/editor.h\nsimilarity index 100%\nrename from editor.h\nrename to lib/editor.h\ndiff --git a/entry.c b/lib/entry.c\nsimilarity index 100%\nrename from entry.c\nrename to lib/entry.c\ndiff --git a/entry.h b/lib/entry.h\nsimilarity index 100%\nrename from entry.h\nrename to lib/entry.h\ndiff --git a/environment.c b/lib/environment.c\nsimilarity index 100%\nrename from environment.c\nrename to lib/environment.c\ndiff --git a/environment.h b/lib/environment.h\nsimilarity index 100%\nrename from environment.h\nrename to lib/environment.h\ndiff --git a/ewah/bitmap.c b/lib/ewah/bitmap.c\nsimilarity index 100%\nrename from ewah/bitmap.c\nrename to lib/ewah/bitmap.c\ndiff --git a/ewah/ewah_bitmap.c b/lib/ewah/ewah_bitmap.c\nsimilarity index 100%\nrename from ewah/ewah_bitmap.c\nrename to lib/ewah/ewah_bitmap.c\ndiff --git a/ewah/ewah_io.c b/lib/ewah/ewah_io.c\nsimilarity index 100%\nrename from ewah/ewah_io.c\nrename to lib/ewah/ewah_io.c\ndiff --git a/ewah/ewah_rlw.c b/lib/ewah/ewah_rlw.c\nsimilarity index 100%\nrename from ewah/ewah_rlw.c\nrename to lib/ewah/ewah_rlw.c\ndiff --git a/ewah/ewok.h b/lib/ewah/ewok.h\nsimilarity index 100%\nrename from ewah/ewok.h\nrename to lib/ewah/ewok.h\ndiff --git a/ewah/ewok_rlw.h b/lib/ewah/ewok_rlw.h\nsimilarity index 100%\nrename from ewah/ewok_rlw.h\nrename to lib/ewah/ewok_rlw.h\ndiff --git a/exec-cmd.c b/lib/exec-cmd.c\nsimilarity index 100%\nrename from exec-cmd.c\nrename to lib/exec-cmd.c\ndiff --git a/exec-cmd.h b/lib/exec-cmd.h\nsimilarity index 100%\nrename from exec-cmd.h\nrename to lib/exec-cmd.h\ndiff --git a/fetch-negotiator.c b/lib/fetch-negotiator.c\nsimilarity index 100%\nrename from fetch-negotiator.c\nrename to lib/fetch-negotiator.c\ndiff --git a/fetch-negotiator.h b/lib/fetch-negotiator.h\nsimilarity index 100%\nrename from fetch-negotiator.h\nrename to lib/fetch-negotiator.h\ndiff --git a/fetch-pack.c b/lib/fetch-pack.c\nsimilarity index 100%\nrename from fetch-pack.c\nrename to lib/fetch-pack.c\ndiff --git a/fetch-pack.h b/lib/fetch-pack.h\nsimilarity index 100%\nrename from fetch-pack.h\nrename to lib/fetch-pack.h\ndiff --git a/fmt-merge-msg.c b/lib/fmt-merge-msg.c\nsimilarity index 100%\nrename from fmt-merge-msg.c\nrename to lib/fmt-merge-msg.c\ndiff --git a/fmt-merge-msg.h b/lib/fmt-merge-msg.h\nsimilarity index 100%\nrename from fmt-merge-msg.h\nrename to lib/fmt-merge-msg.h\ndiff --git a/for-each-ref.h b/lib/for-each-ref.h\nsimilarity index 100%\nrename from for-each-ref.h\nrename to lib/for-each-ref.h\ndiff --git a/fsck.c b/lib/fsck.c\nsimilarity index 100%\nrename from fsck.c\nrename to lib/fsck.c\ndiff --git a/fsck.h b/lib/fsck.h\nsimilarity index 100%\nrename from fsck.h\nrename to lib/fsck.h\ndiff --git a/fsmonitor--daemon.h b/lib/fsmonitor--daemon.h\nsimilarity index 100%\nrename from fsmonitor--daemon.h\nrename to lib/fsmonitor--daemon.h\ndiff --git a/fsmonitor-ipc.c b/lib/fsmonitor-ipc.c\nsimilarity index 100%\nrename from fsmonitor-ipc.c\nrename to lib/fsmonitor-ipc.c\ndiff --git a/fsmonitor-ipc.h b/lib/fsmonitor-ipc.h\nsimilarity index 100%\nrename from fsmonitor-ipc.h\nrename to lib/fsmonitor-ipc.h\ndiff --git a/fsmonitor-ll.h b/lib/fsmonitor-ll.h\nsimilarity index 100%\nrename from fsmonitor-ll.h\nrename to lib/fsmonitor-ll.h\ndiff --git a/fsmonitor-path-utils.h b/lib/fsmonitor-path-utils.h\nsimilarity index 100%\nrename from fsmonitor-path-utils.h\nrename to lib/fsmonitor-path-utils.h\ndiff --git a/fsmonitor-settings.c b/lib/fsmonitor-settings.c\nsimilarity index 100%\nrename from fsmonitor-settings.c\nrename to lib/fsmonitor-settings.c\ndiff --git a/fsmonitor-settings.h b/lib/fsmonitor-settings.h\nsimilarity index 100%\nrename from fsmonitor-settings.h\nrename to lib/fsmonitor-settings.h\ndiff --git a/fsmonitor.c b/lib/fsmonitor.c\nsimilarity index 100%\nrename from fsmonitor.c\nrename to lib/fsmonitor.c\ndiff --git a/fsmonitor.h b/lib/fsmonitor.h\nsimilarity index 100%\nrename from fsmonitor.h\nrename to lib/fsmonitor.h\ndiff --git a/gettext.c b/lib/gettext.c\nsimilarity index 100%\nrename from gettext.c\nrename to lib/gettext.c\ndiff --git a/gettext.h b/lib/gettext.h\nsimilarity index 100%\nrename from gettext.h\nrename to lib/gettext.h\ndiff --git a/git-compat-util.h b/lib/git-compat-util.h\nsimilarity index 100%\nrename from git-compat-util.h\nrename to lib/git-compat-util.h\ndiff --git a/git-curl-compat.h b/lib/git-curl-compat.h\nsimilarity index 100%\nrename from git-curl-compat.h\nrename to lib/git-curl-compat.h\ndiff --git a/git-zlib.c b/lib/git-zlib.c\nsimilarity index 100%\nrename from git-zlib.c\nrename to lib/git-zlib.c\ndiff --git a/git-zlib.h b/lib/git-zlib.h\nsimilarity index 100%\nrename from git-zlib.h\nrename to lib/git-zlib.h\ndiff --git a/gpg-interface.c b/lib/gpg-interface.c\nsimilarity index 100%\nrename from gpg-interface.c\nrename to lib/gpg-interface.c\ndiff --git a/gpg-interface.h b/lib/gpg-interface.h\nsimilarity index 100%\nrename from gpg-interface.h\nrename to lib/gpg-interface.h\ndiff --git a/graph.c b/lib/graph.c\nsimilarity index 100%\nrename from graph.c\nrename to lib/graph.c\ndiff --git a/graph.h b/lib/graph.h\nsimilarity index 100%\nrename from graph.h\nrename to lib/graph.h\ndiff --git a/grep.c b/lib/grep.c\nsimilarity index 100%\nrename from grep.c\nrename to lib/grep.c\ndiff --git a/grep.h b/lib/grep.h\nsimilarity index 100%\nrename from grep.h\nrename to lib/grep.h\ndiff --git a/hash-lookup.c b/lib/hash-lookup.c\nsimilarity index 100%\nrename from hash-lookup.c\nrename to lib/hash-lookup.c\ndiff --git a/hash-lookup.h b/lib/hash-lookup.h\nsimilarity index 100%\nrename from hash-lookup.h\nrename to lib/hash-lookup.h\ndiff --git a/hash.c b/lib/hash.c\nsimilarity index 100%\nrename from hash.c\nrename to lib/hash.c\ndiff --git a/hash.h b/lib/hash.h\nsimilarity index 100%\nrename from hash.h\nrename to lib/hash.h\ndiff --git a/hashmap.c b/lib/hashmap.c\nsimilarity index 100%\nrename from hashmap.c\nrename to lib/hashmap.c\ndiff --git a/hashmap.h b/lib/hashmap.h\nsimilarity index 100%\nrename from hashmap.h\nrename to lib/hashmap.h\ndiff --git a/help.c b/lib/help.c\nsimilarity index 100%\nrename from help.c\nrename to lib/help.c\ndiff --git a/help.h b/lib/help.h\nsimilarity index 100%\nrename from help.h\nrename to lib/help.h\ndiff --git a/hex-ll.c b/lib/hex-ll.c\nsimilarity index 100%\nrename from hex-ll.c\nrename to lib/hex-ll.c\ndiff --git a/hex-ll.h b/lib/hex-ll.h\nsimilarity index 100%\nrename from hex-ll.h\nrename to lib/hex-ll.h\ndiff --git a/hex.c b/lib/hex.c\nsimilarity index 100%\nrename from hex.c\nrename to lib/hex.c\ndiff --git a/hex.h b/lib/hex.h\nsimilarity index 100%\nrename from hex.h\nrename to lib/hex.h\ndiff --git a/hook.c b/lib/hook.c\nsimilarity index 100%\nrename from hook.c\nrename to lib/hook.c\ndiff --git a/hook.h b/lib/hook.h\nsimilarity index 100%\nrename from hook.h\nrename to lib/hook.h\ndiff --git a/http-walker.c b/lib/http-walker.c\nsimilarity index 100%\nrename from http-walker.c\nrename to lib/http-walker.c\ndiff --git a/http.c b/lib/http.c\nsimilarity index 100%\nrename from http.c\nrename to lib/http.c\ndiff --git a/http.h b/lib/http.h\nsimilarity index 100%\nrename from http.h\nrename to lib/http.h\ndiff --git a/ident.c b/lib/ident.c\nsimilarity index 100%\nrename from ident.c\nrename to lib/ident.c\ndiff --git a/ident.h b/lib/ident.h\nsimilarity index 100%\nrename from ident.h\nrename to lib/ident.h\ndiff --git a/iterator.h b/lib/iterator.h\nsimilarity index 100%\nrename from iterator.h\nrename to lib/iterator.h\ndiff --git a/json-writer.c b/lib/json-writer.c\nsimilarity index 100%\nrename from json-writer.c\nrename to lib/json-writer.c\ndiff --git a/json-writer.h b/lib/json-writer.h\nsimilarity index 100%\nrename from json-writer.h\nrename to lib/json-writer.h\ndiff --git a/khash.h b/lib/khash.h\nsimilarity index 100%\nrename from khash.h\nrename to lib/khash.h\ndiff --git a/kwset.c b/lib/kwset.c\nsimilarity index 100%\nrename from kwset.c\nrename to lib/kwset.c\ndiff --git a/kwset.h b/lib/kwset.h\nsimilarity index 100%\nrename from kwset.h\nrename to lib/kwset.h\ndiff --git a/levenshtein.c b/lib/levenshtein.c\nsimilarity index 100%\nrename from levenshtein.c\nrename to lib/levenshtein.c\ndiff --git a/levenshtein.h b/lib/levenshtein.h\nsimilarity index 100%\nrename from levenshtein.h\nrename to lib/levenshtein.h\ndiff --git a/line-log.c b/lib/line-log.c\nsimilarity index 100%\nrename from line-log.c\nrename to lib/line-log.c\ndiff --git a/line-log.h b/lib/line-log.h\nsimilarity index 100%\nrename from line-log.h\nrename to lib/line-log.h\ndiff --git a/line-range.c b/lib/line-range.c\nsimilarity index 100%\nrename from line-range.c\nrename to lib/line-range.c\ndiff --git a/line-range.h b/lib/line-range.h\nsimilarity index 100%\nrename from line-range.h\nrename to lib/line-range.h\ndiff --git a/linear-assignment.c b/lib/linear-assignment.c\nsimilarity index 100%\nrename from linear-assignment.c\nrename to lib/linear-assignment.c\ndiff --git a/linear-assignment.h b/lib/linear-assignment.h\nsimilarity index 100%\nrename from linear-assignment.h\nrename to lib/linear-assignment.h\ndiff --git a/list-objects-filter-options.c b/lib/list-objects-filter-options.c\nsimilarity index 100%\nrename from list-objects-filter-options.c\nrename to lib/list-objects-filter-options.c\ndiff --git a/list-objects-filter-options.h b/lib/list-objects-filter-options.h\nsimilarity index 100%\nrename from list-objects-filter-options.h\nrename to lib/list-objects-filter-options.h\ndiff --git a/list-objects-filter.c b/lib/list-objects-filter.c\nsimilarity index 100%\nrename from list-objects-filter.c\nrename to lib/list-objects-filter.c\ndiff --git a/list-objects-filter.h b/lib/list-objects-filter.h\nsimilarity index 100%\nrename from list-objects-filter.h\nrename to lib/list-objects-filter.h\ndiff --git a/list-objects.c b/lib/list-objects.c\nsimilarity index 100%\nrename from list-objects.c\nrename to lib/list-objects.c\ndiff --git a/list-objects.h b/lib/list-objects.h\nsimilarity index 100%\nrename from list-objects.h\nrename to lib/list-objects.h\ndiff --git a/list.h b/lib/list.h\nsimilarity index 100%\nrename from list.h\nrename to lib/list.h\ndiff --git a/lockfile.c b/lib/lockfile.c\nsimilarity index 100%\nrename from lockfile.c\nrename to lib/lockfile.c\ndiff --git a/lockfile.h b/lib/lockfile.h\nsimilarity index 100%\nrename from lockfile.h\nrename to lib/lockfile.h\ndiff --git a/log-tree.c b/lib/log-tree.c\nsimilarity index 100%\nrename from log-tree.c\nrename to lib/log-tree.c\ndiff --git a/log-tree.h b/lib/log-tree.h\nsimilarity index 100%\nrename from log-tree.h\nrename to lib/log-tree.h\ndiff --git a/loose.c b/lib/loose.c\nsimilarity index 100%\nrename from loose.c\nrename to lib/loose.c\ndiff --git a/loose.h b/lib/loose.h\nsimilarity index 100%\nrename from loose.h\nrename to lib/loose.h\ndiff --git a/ls-refs.c b/lib/ls-refs.c\nsimilarity index 100%\nrename from ls-refs.c\nrename to lib/ls-refs.c\ndiff --git a/ls-refs.h b/lib/ls-refs.h\nsimilarity index 100%\nrename from ls-refs.h\nrename to lib/ls-refs.h\ndiff --git a/mailinfo.c b/lib/mailinfo.c\nsimilarity index 100%\nrename from mailinfo.c\nrename to lib/mailinfo.c\ndiff --git a/mailinfo.h b/lib/mailinfo.h\nsimilarity index 100%\nrename from mailinfo.h\nrename to lib/mailinfo.h\ndiff --git a/mailmap.c b/lib/mailmap.c\nsimilarity index 100%\nrename from mailmap.c\nrename to lib/mailmap.c\ndiff --git a/mailmap.h b/lib/mailmap.h\nsimilarity index 100%\nrename from mailmap.h\nrename to lib/mailmap.h\ndiff --git a/match-trees.c b/lib/match-trees.c\nsimilarity index 100%\nrename from match-trees.c\nrename to lib/match-trees.c\ndiff --git a/match-trees.h b/lib/match-trees.h\nsimilarity index 100%\nrename from match-trees.h\nrename to lib/match-trees.h\ndiff --git a/mem-pool.c b/lib/mem-pool.c\nsimilarity index 100%\nrename from mem-pool.c\nrename to lib/mem-pool.c\ndiff --git a/mem-pool.h b/lib/mem-pool.h\nsimilarity index 100%\nrename from mem-pool.h\nrename to lib/mem-pool.h\ndiff --git a/merge-blobs.c b/lib/merge-blobs.c\nsimilarity index 100%\nrename from merge-blobs.c\nrename to lib/merge-blobs.c\ndiff --git a/merge-blobs.h b/lib/merge-blobs.h\nsimilarity index 100%\nrename from merge-blobs.h\nrename to lib/merge-blobs.h\ndiff --git a/merge-ll.c b/lib/merge-ll.c\nsimilarity index 100%\nrename from merge-ll.c\nrename to lib/merge-ll.c\ndiff --git a/merge-ll.h b/lib/merge-ll.h\nsimilarity index 100%\nrename from merge-ll.h\nrename to lib/merge-ll.h\ndiff --git a/merge-ort-wrappers.c b/lib/merge-ort-wrappers.c\nsimilarity index 100%\nrename from merge-ort-wrappers.c\nrename to lib/merge-ort-wrappers.c\ndiff --git a/merge-ort-wrappers.h b/lib/merge-ort-wrappers.h\nsimilarity index 100%\nrename from merge-ort-wrappers.h\nrename to lib/merge-ort-wrappers.h\ndiff --git a/merge-ort.c b/lib/merge-ort.c\nsimilarity index 100%\nrename from merge-ort.c\nrename to lib/merge-ort.c\ndiff --git a/merge-ort.h b/lib/merge-ort.h\nsimilarity index 100%\nrename from merge-ort.h\nrename to lib/merge-ort.h\ndiff --git a/merge.c b/lib/merge.c\nsimilarity index 100%\nrename from merge.c\nrename to lib/merge.c\ndiff --git a/merge.h b/lib/merge.h\nsimilarity index 100%\nrename from merge.h\nrename to lib/merge.h\ndiff --git a/mergesort.h b/lib/mergesort.h\nsimilarity index 100%\nrename from mergesort.h\nrename to lib/mergesort.h\ndiff --git a/midx-write.c b/lib/midx-write.c\nsimilarity index 100%\nrename from midx-write.c\nrename to lib/midx-write.c\ndiff --git a/midx.c b/lib/midx.c\nsimilarity index 100%\nrename from midx.c\nrename to lib/midx.c\ndiff --git a/midx.h b/lib/midx.h\nsimilarity index 100%\nrename from midx.h\nrename to lib/midx.h\ndiff --git a/name-hash.c b/lib/name-hash.c\nsimilarity index 100%\nrename from name-hash.c\nrename to lib/name-hash.c\ndiff --git a/name-hash.h b/lib/name-hash.h\nsimilarity index 100%\nrename from name-hash.h\nrename to lib/name-hash.h\ndiff --git a/negotiator/default.c b/lib/negotiator/default.c\nsimilarity index 100%\nrename from negotiator/default.c\nrename to lib/negotiator/default.c\ndiff --git a/negotiator/default.h b/lib/negotiator/default.h\nsimilarity index 100%\nrename from negotiator/default.h\nrename to lib/negotiator/default.h\ndiff --git a/negotiator/noop.c b/lib/negotiator/noop.c\nsimilarity index 100%\nrename from negotiator/noop.c\nrename to lib/negotiator/noop.c\ndiff --git a/negotiator/noop.h b/lib/negotiator/noop.h\nsimilarity index 100%\nrename from negotiator/noop.h\nrename to lib/negotiator/noop.h\ndiff --git a/negotiator/skipping.c b/lib/negotiator/skipping.c\nsimilarity index 100%\nrename from negotiator/skipping.c\nrename to lib/negotiator/skipping.c\ndiff --git a/negotiator/skipping.h b/lib/negotiator/skipping.h\nsimilarity index 100%\nrename from negotiator/skipping.h\nrename to lib/negotiator/skipping.h\ndiff --git a/notes-cache.c b/lib/notes-cache.c\nsimilarity index 100%\nrename from notes-cache.c\nrename to lib/notes-cache.c\ndiff --git a/notes-cache.h b/lib/notes-cache.h\nsimilarity index 100%\nrename from notes-cache.h\nrename to lib/notes-cache.h\ndiff --git a/notes-merge.c b/lib/notes-merge.c\nsimilarity index 100%\nrename from notes-merge.c\nrename to lib/notes-merge.c\ndiff --git a/notes-merge.h b/lib/notes-merge.h\nsimilarity index 100%\nrename from notes-merge.h\nrename to lib/notes-merge.h\ndiff --git a/notes-utils.c b/lib/notes-utils.c\nsimilarity index 100%\nrename from notes-utils.c\nrename to lib/notes-utils.c\ndiff --git a/notes-utils.h b/lib/notes-utils.h\nsimilarity index 100%\nrename from notes-utils.h\nrename to lib/notes-utils.h\ndiff --git a/notes.c b/lib/notes.c\nsimilarity index 100%\nrename from notes.c\nrename to lib/notes.c\ndiff --git a/notes.h b/lib/notes.h\nsimilarity index 100%\nrename from notes.h\nrename to lib/notes.h\ndiff --git a/object-file-convert.c b/lib/object-file-convert.c\nsimilarity index 100%\nrename from object-file-convert.c\nrename to lib/object-file-convert.c\ndiff --git a/object-file-convert.h b/lib/object-file-convert.h\nsimilarity index 100%\nrename from object-file-convert.h\nrename to lib/object-file-convert.h\ndiff --git a/object-file.c b/lib/object-file.c\nsimilarity index 100%\nrename from object-file.c\nrename to lib/object-file.c\ndiff --git a/object-file.h b/lib/object-file.h\nsimilarity index 100%\nrename from object-file.h\nrename to lib/object-file.h\ndiff --git a/object-name.c b/lib/object-name.c\nsimilarity index 100%\nrename from object-name.c\nrename to lib/object-name.c\ndiff --git a/object-name.h b/lib/object-name.h\nsimilarity index 100%\nrename from object-name.h\nrename to lib/object-name.h\ndiff --git a/object.c b/lib/object.c\nsimilarity index 100%\nrename from object.c\nrename to lib/object.c\ndiff --git a/object.h b/lib/object.h\nsimilarity index 100%\nrename from object.h\nrename to lib/object.h\ndiff --git a/odb.c b/lib/odb.c\nsimilarity index 100%\nrename from odb.c\nrename to lib/odb.c\ndiff --git a/odb.h b/lib/odb.h\nsimilarity index 100%\nrename from odb.h\nrename to lib/odb.h\ndiff --git a/odb/source-files.c b/lib/odb/source-files.c\nsimilarity index 100%\nrename from odb/source-files.c\nrename to lib/odb/source-files.c\ndiff --git a/odb/source-files.h b/lib/odb/source-files.h\nsimilarity index 100%\nrename from odb/source-files.h\nrename to lib/odb/source-files.h\ndiff --git a/odb/source-inmemory.c b/lib/odb/source-inmemory.c\nsimilarity index 100%\nrename from odb/source-inmemory.c\nrename to lib/odb/source-inmemory.c\ndiff --git a/odb/source-inmemory.h b/lib/odb/source-inmemory.h\nsimilarity index 100%\nrename from odb/source-inmemory.h\nrename to lib/odb/source-inmemory.h\ndiff --git a/odb/source-loose.c b/lib/odb/source-loose.c\nsimilarity index 100%\nrename from odb/source-loose.c\nrename to lib/odb/source-loose.c\ndiff --git a/odb/source-loose.h b/lib/odb/source-loose.h\nsimilarity index 100%\nrename from odb/source-loose.h\nrename to lib/odb/source-loose.h\ndiff --git a/odb/source-packed.c b/lib/odb/source-packed.c\nsimilarity index 100%\nrename from odb/source-packed.c\nrename to lib/odb/source-packed.c\ndiff --git a/odb/source-packed.h b/lib/odb/source-packed.h\nsimilarity index 100%\nrename from odb/source-packed.h\nrename to lib/odb/source-packed.h\ndiff --git a/odb/source.c b/lib/odb/source.c\nsimilarity index 100%\nrename from odb/source.c\nrename to lib/odb/source.c\ndiff --git a/odb/source.h b/lib/odb/source.h\nsimilarity index 100%\nrename from odb/source.h\nrename to lib/odb/source.h\ndiff --git a/odb/streaming.c b/lib/odb/streaming.c\nsimilarity index 100%\nrename from odb/streaming.c\nrename to lib/odb/streaming.c\ndiff --git a/odb/streaming.h b/lib/odb/streaming.h\nsimilarity index 100%\nrename from odb/streaming.h\nrename to lib/odb/streaming.h\ndiff --git a/odb/transaction.c b/lib/odb/transaction.c\nsimilarity index 100%\nrename from odb/transaction.c\nrename to lib/odb/transaction.c\ndiff --git a/odb/transaction.h b/lib/odb/transaction.h\nsimilarity index 100%\nrename from odb/transaction.h\nrename to lib/odb/transaction.h\ndiff --git a/oid-array.c b/lib/oid-array.c\nsimilarity index 100%\nrename from oid-array.c\nrename to lib/oid-array.c\ndiff --git a/oid-array.h b/lib/oid-array.h\nsimilarity index 100%\nrename from oid-array.h\nrename to lib/oid-array.h\ndiff --git a/oidmap.c b/lib/oidmap.c\nsimilarity index 100%\nrename from oidmap.c\nrename to lib/oidmap.c\ndiff --git a/oidmap.h b/lib/oidmap.h\nsimilarity index 100%\nrename from oidmap.h\nrename to lib/oidmap.h\ndiff --git a/oidset.c b/lib/oidset.c\nsimilarity index 100%\nrename from oidset.c\nrename to lib/oidset.c\ndiff --git a/oidset.h b/lib/oidset.h\nsimilarity index 100%\nrename from oidset.h\nrename to lib/oidset.h\ndiff --git a/oidtree.c b/lib/oidtree.c\nsimilarity index 100%\nrename from oidtree.c\nrename to lib/oidtree.c\ndiff --git a/oidtree.h b/lib/oidtree.h\nsimilarity index 100%\nrename from oidtree.h\nrename to lib/oidtree.h\ndiff --git a/pack-bitmap-write.c b/lib/pack-bitmap-write.c\nsimilarity index 100%\nrename from pack-bitmap-write.c\nrename to lib/pack-bitmap-write.c\ndiff --git a/pack-bitmap.c b/lib/pack-bitmap.c\nsimilarity index 100%\nrename from pack-bitmap.c\nrename to lib/pack-bitmap.c\ndiff --git a/pack-bitmap.h b/lib/pack-bitmap.h\nsimilarity index 100%\nrename from pack-bitmap.h\nrename to lib/pack-bitmap.h\ndiff --git a/pack-check.c b/lib/pack-check.c\nsimilarity index 100%\nrename from pack-check.c\nrename to lib/pack-check.c\ndiff --git a/pack-mtimes.c b/lib/pack-mtimes.c\nsimilarity index 100%\nrename from pack-mtimes.c\nrename to lib/pack-mtimes.c\ndiff --git a/pack-mtimes.h b/lib/pack-mtimes.h\nsimilarity index 100%\nrename from pack-mtimes.h\nrename to lib/pack-mtimes.h\ndiff --git a/pack-objects.c b/lib/pack-objects.c\nsimilarity index 100%\nrename from pack-objects.c\nrename to lib/pack-objects.c\ndiff --git a/pack-objects.h b/lib/pack-objects.h\nsimilarity index 100%\nrename from pack-objects.h\nrename to lib/pack-objects.h\ndiff --git a/pack-refs.c b/lib/pack-refs.c\nsimilarity index 100%\nrename from pack-refs.c\nrename to lib/pack-refs.c\ndiff --git a/pack-refs.h b/lib/pack-refs.h\nsimilarity index 100%\nrename from pack-refs.h\nrename to lib/pack-refs.h\ndiff --git a/pack-revindex.c b/lib/pack-revindex.c\nsimilarity index 100%\nrename from pack-revindex.c\nrename to lib/pack-revindex.c\ndiff --git a/pack-revindex.h b/lib/pack-revindex.h\nsimilarity index 100%\nrename from pack-revindex.h\nrename to lib/pack-revindex.h\ndiff --git a/pack-write.c b/lib/pack-write.c\nsimilarity index 100%\nrename from pack-write.c\nrename to lib/pack-write.c\ndiff --git a/pack.h b/lib/pack.h\nsimilarity index 100%\nrename from pack.h\nrename to lib/pack.h\ndiff --git a/packfile-list.c b/lib/packfile-list.c\nsimilarity index 100%\nrename from packfile-list.c\nrename to lib/packfile-list.c\ndiff --git a/packfile-list.h b/lib/packfile-list.h\nsimilarity index 100%\nrename from packfile-list.h\nrename to lib/packfile-list.h\ndiff --git a/packfile.c b/lib/packfile.c\nsimilarity index 100%\nrename from packfile.c\nrename to lib/packfile.c\ndiff --git a/packfile.h b/lib/packfile.h\nsimilarity index 100%\nrename from packfile.h\nrename to lib/packfile.h\ndiff --git a/pager.c b/lib/pager.c\nsimilarity index 100%\nrename from pager.c\nrename to lib/pager.c\ndiff --git a/pager.h b/lib/pager.h\nsimilarity index 100%\nrename from pager.h\nrename to lib/pager.h\ndiff --git a/parallel-checkout.c b/lib/parallel-checkout.c\nsimilarity index 100%\nrename from parallel-checkout.c\nrename to lib/parallel-checkout.c\ndiff --git a/parallel-checkout.h b/lib/parallel-checkout.h\nsimilarity index 100%\nrename from parallel-checkout.h\nrename to lib/parallel-checkout.h\ndiff --git a/parse-options-cb.c b/lib/parse-options-cb.c\nsimilarity index 100%\nrename from parse-options-cb.c\nrename to lib/parse-options-cb.c\ndiff --git a/parse-options.c b/lib/parse-options.c\nsimilarity index 100%\nrename from parse-options.c\nrename to lib/parse-options.c\ndiff --git a/parse-options.h b/lib/parse-options.h\nsimilarity index 100%\nrename from parse-options.h\nrename to lib/parse-options.h\ndiff --git a/parse.c b/lib/parse.c\nsimilarity index 100%\nrename from parse.c\nrename to lib/parse.c\ndiff --git a/parse.h b/lib/parse.h\nsimilarity index 100%\nrename from parse.h\nrename to lib/parse.h\ndiff --git a/patch-delta.c b/lib/patch-delta.c\nsimilarity index 100%\nrename from patch-delta.c\nrename to lib/patch-delta.c\ndiff --git a/patch-ids.c b/lib/patch-ids.c\nsimilarity index 100%\nrename from patch-ids.c\nrename to lib/patch-ids.c\ndiff --git a/patch-ids.h b/lib/patch-ids.h\nsimilarity index 100%\nrename from patch-ids.h\nrename to lib/patch-ids.h\ndiff --git a/path-walk.c b/lib/path-walk.c\nsimilarity index 100%\nrename from path-walk.c\nrename to lib/path-walk.c\ndiff --git a/path-walk.h b/lib/path-walk.h\nsimilarity index 100%\nrename from path-walk.h\nrename to lib/path-walk.h\ndiff --git a/path.c b/lib/path.c\nsimilarity index 100%\nrename from path.c\nrename to lib/path.c\ndiff --git a/path.h b/lib/path.h\nsimilarity index 100%\nrename from path.h\nrename to lib/path.h\ndiff --git a/pathspec.c b/lib/pathspec.c\nsimilarity index 100%\nrename from pathspec.c\nrename to lib/pathspec.c\ndiff --git a/pathspec.h b/lib/pathspec.h\nsimilarity index 100%\nrename from pathspec.h\nrename to lib/pathspec.h\ndiff --git a/pkt-line.c b/lib/pkt-line.c\nsimilarity index 100%\nrename from pkt-line.c\nrename to lib/pkt-line.c\ndiff --git a/pkt-line.h b/lib/pkt-line.h\nsimilarity index 100%\nrename from pkt-line.h\nrename to lib/pkt-line.h\ndiff --git a/preload-index.c b/lib/preload-index.c\nsimilarity index 100%\nrename from preload-index.c\nrename to lib/preload-index.c\ndiff --git a/preload-index.h b/lib/preload-index.h\nsimilarity index 100%\nrename from preload-index.h\nrename to lib/preload-index.h\ndiff --git a/pretty.c b/lib/pretty.c\nsimilarity index 100%\nrename from pretty.c\nrename to lib/pretty.c\ndiff --git a/pretty.h b/lib/pretty.h\nsimilarity index 100%\nrename from pretty.h\nrename to lib/pretty.h\ndiff --git a/prio-queue.c b/lib/prio-queue.c\nsimilarity index 100%\nrename from prio-queue.c\nrename to lib/prio-queue.c\ndiff --git a/prio-queue.h b/lib/prio-queue.h\nsimilarity index 100%\nrename from prio-queue.h\nrename to lib/prio-queue.h\ndiff --git a/progress.c b/lib/progress.c\nsimilarity index 100%\nrename from progress.c\nrename to lib/progress.c\ndiff --git a/progress.h b/lib/progress.h\nsimilarity index 100%\nrename from progress.h\nrename to lib/progress.h\ndiff --git a/promisor-remote.c b/lib/promisor-remote.c\nsimilarity index 100%\nrename from promisor-remote.c\nrename to lib/promisor-remote.c\ndiff --git a/promisor-remote.h b/lib/promisor-remote.h\nsimilarity index 100%\nrename from promisor-remote.h\nrename to lib/promisor-remote.h\ndiff --git a/prompt.c b/lib/prompt.c\nsimilarity index 100%\nrename from prompt.c\nrename to lib/prompt.c\ndiff --git a/prompt.h b/lib/prompt.h\nsimilarity index 100%\nrename from prompt.h\nrename to lib/prompt.h\ndiff --git a/protocol-caps.c b/lib/protocol-caps.c\nsimilarity index 100%\nrename from protocol-caps.c\nrename to lib/protocol-caps.c\ndiff --git a/protocol-caps.h b/lib/protocol-caps.h\nsimilarity index 100%\nrename from protocol-caps.h\nrename to lib/protocol-caps.h\ndiff --git a/protocol.c b/lib/protocol.c\nsimilarity index 100%\nrename from protocol.c\nrename to lib/protocol.c\ndiff --git a/protocol.h b/lib/protocol.h\nsimilarity index 100%\nrename from protocol.h\nrename to lib/protocol.h\ndiff --git a/prune-packed.c b/lib/prune-packed.c\nsimilarity index 100%\nrename from prune-packed.c\nrename to lib/prune-packed.c\ndiff --git a/prune-packed.h b/lib/prune-packed.h\nsimilarity index 100%\nrename from prune-packed.h\nrename to lib/prune-packed.h\ndiff --git a/pseudo-merge.c b/lib/pseudo-merge.c\nsimilarity index 100%\nrename from pseudo-merge.c\nrename to lib/pseudo-merge.c\ndiff --git a/pseudo-merge.h b/lib/pseudo-merge.h\nsimilarity index 100%\nrename from pseudo-merge.h\nrename to lib/pseudo-merge.h\ndiff --git a/quote.c b/lib/quote.c\nsimilarity index 100%\nrename from quote.c\nrename to lib/quote.c\ndiff --git a/quote.h b/lib/quote.h\nsimilarity index 100%\nrename from quote.h\nrename to lib/quote.h\ndiff --git a/range-diff.c b/lib/range-diff.c\nsimilarity index 100%\nrename from range-diff.c\nrename to lib/range-diff.c\ndiff --git a/range-diff.h b/lib/range-diff.h\nsimilarity index 100%\nrename from range-diff.h\nrename to lib/range-diff.h\ndiff --git a/reachable.c b/lib/reachable.c\nsimilarity index 100%\nrename from reachable.c\nrename to lib/reachable.c\ndiff --git a/reachable.h b/lib/reachable.h\nsimilarity index 100%\nrename from reachable.h\nrename to lib/reachable.h\ndiff --git a/read-cache-ll.h b/lib/read-cache-ll.h\nsimilarity index 100%\nrename from read-cache-ll.h\nrename to lib/read-cache-ll.h\ndiff --git a/read-cache.c b/lib/read-cache.c\nsimilarity index 100%\nrename from read-cache.c\nrename to lib/read-cache.c\ndiff --git a/read-cache.h b/lib/read-cache.h\nsimilarity index 100%\nrename from read-cache.h\nrename to lib/read-cache.h\ndiff --git a/rebase-interactive.c b/lib/rebase-interactive.c\nsimilarity index 100%\nrename from rebase-interactive.c\nrename to lib/rebase-interactive.c\ndiff --git a/rebase-interactive.h b/lib/rebase-interactive.h\nsimilarity index 100%\nrename from rebase-interactive.h\nrename to lib/rebase-interactive.h\ndiff --git a/rebase.c b/lib/rebase.c\nsimilarity index 100%\nrename from rebase.c\nrename to lib/rebase.c\ndiff --git a/rebase.h b/lib/rebase.h\nsimilarity index 100%\nrename from rebase.h\nrename to lib/rebase.h\ndiff --git a/ref-filter.c b/lib/ref-filter.c\nsimilarity index 100%\nrename from ref-filter.c\nrename to lib/ref-filter.c\ndiff --git a/ref-filter.h b/lib/ref-filter.h\nsimilarity index 100%\nrename from ref-filter.h\nrename to lib/ref-filter.h\ndiff --git a/reflog-walk.c b/lib/reflog-walk.c\nsimilarity index 100%\nrename from reflog-walk.c\nrename to lib/reflog-walk.c\ndiff --git a/reflog-walk.h b/lib/reflog-walk.h\nsimilarity index 100%\nrename from reflog-walk.h\nrename to lib/reflog-walk.h\ndiff --git a/reflog.c b/lib/reflog.c\nsimilarity index 100%\nrename from reflog.c\nrename to lib/reflog.c\ndiff --git a/reflog.h b/lib/reflog.h\nsimilarity index 100%\nrename from reflog.h\nrename to lib/reflog.h\ndiff --git a/refs.c b/lib/refs.c\nsimilarity index 100%\nrename from refs.c\nrename to lib/refs.c\ndiff --git a/refs.h b/lib/refs.h\nsimilarity index 100%\nrename from refs.h\nrename to lib/refs.h\ndiff --git a/refs/debug.c b/lib/refs/debug.c\nsimilarity index 100%\nrename from refs/debug.c\nrename to lib/refs/debug.c\ndiff --git a/refs/files-backend.c b/lib/refs/files-backend.c\nsimilarity index 100%\nrename from refs/files-backend.c\nrename to lib/refs/files-backend.c\ndiff --git a/refs/iterator.c b/lib/refs/iterator.c\nsimilarity index 100%\nrename from refs/iterator.c\nrename to lib/refs/iterator.c\ndiff --git a/refs/packed-backend.c b/lib/refs/packed-backend.c\nsimilarity index 100%\nrename from refs/packed-backend.c\nrename to lib/refs/packed-backend.c\ndiff --git a/refs/packed-backend.h b/lib/refs/packed-backend.h\nsimilarity index 100%\nrename from refs/packed-backend.h\nrename to lib/refs/packed-backend.h\ndiff --git a/refs/ref-cache.c b/lib/refs/ref-cache.c\nsimilarity index 100%\nrename from refs/ref-cache.c\nrename to lib/refs/ref-cache.c\ndiff --git a/refs/ref-cache.h b/lib/refs/ref-cache.h\nsimilarity index 100%\nrename from refs/ref-cache.h\nrename to lib/refs/ref-cache.h\ndiff --git a/refs/refs-internal.h b/lib/refs/refs-internal.h\nsimilarity index 100%\nrename from refs/refs-internal.h\nrename to lib/refs/refs-internal.h\ndiff --git a/refs/reftable-backend.c b/lib/refs/reftable-backend.c\nsimilarity index 100%\nrename from refs/reftable-backend.c\nrename to lib/refs/reftable-backend.c\ndiff --git a/refspec.c b/lib/refspec.c\nsimilarity index 100%\nrename from refspec.c\nrename to lib/refspec.c\ndiff --git a/refspec.h b/lib/refspec.h\nsimilarity index 100%\nrename from refspec.h\nrename to lib/refspec.h\ndiff --git a/reftable/LICENSE b/lib/reftable/LICENSE\nsimilarity index 100%\nrename from reftable/LICENSE\nrename to lib/reftable/LICENSE\ndiff --git a/reftable/basics.c b/lib/reftable/basics.c\nsimilarity index 100%\nrename from reftable/basics.c\nrename to lib/reftable/basics.c\ndiff --git a/reftable/basics.h b/lib/reftable/basics.h\nsimilarity index 100%\nrename from reftable/basics.h\nrename to lib/reftable/basics.h\ndiff --git a/reftable/block.c b/lib/reftable/block.c\nsimilarity index 100%\nrename from reftable/block.c\nrename to lib/reftable/block.c\ndiff --git a/reftable/block.h b/lib/reftable/block.h\nsimilarity index 100%\nrename from reftable/block.h\nrename to lib/reftable/block.h\ndiff --git a/reftable/blocksource.c b/lib/reftable/blocksource.c\nsimilarity index 100%\nrename from reftable/blocksource.c\nrename to lib/reftable/blocksource.c\ndiff --git a/reftable/blocksource.h b/lib/reftable/blocksource.h\nsimilarity index 100%\nrename from reftable/blocksource.h\nrename to lib/reftable/blocksource.h\ndiff --git a/reftable/constants.h b/lib/reftable/constants.h\nsimilarity index 100%\nrename from reftable/constants.h\nrename to lib/reftable/constants.h\ndiff --git a/reftable/error.c b/lib/reftable/error.c\nsimilarity index 100%\nrename from reftable/error.c\nrename to lib/reftable/error.c\ndiff --git a/reftable/fsck.c b/lib/reftable/fsck.c\nsimilarity index 100%\nrename from reftable/fsck.c\nrename to lib/reftable/fsck.c\ndiff --git a/reftable/iter.c b/lib/reftable/iter.c\nsimilarity index 100%\nrename from reftable/iter.c\nrename to lib/reftable/iter.c\ndiff --git a/reftable/iter.h b/lib/reftable/iter.h\nsimilarity index 100%\nrename from reftable/iter.h\nrename to lib/reftable/iter.h\ndiff --git a/reftable/merged.c b/lib/reftable/merged.c\nsimilarity index 100%\nrename from reftable/merged.c\nrename to lib/reftable/merged.c\ndiff --git a/reftable/merged.h b/lib/reftable/merged.h\nsimilarity index 100%\nrename from reftable/merged.h\nrename to lib/reftable/merged.h\ndiff --git a/reftable/pq.c b/lib/reftable/pq.c\nsimilarity index 100%\nrename from reftable/pq.c\nrename to lib/reftable/pq.c\ndiff --git a/reftable/pq.h b/lib/reftable/pq.h\nsimilarity index 100%\nrename from reftable/pq.h\nrename to lib/reftable/pq.h\ndiff --git a/reftable/record.c b/lib/reftable/record.c\nsimilarity index 100%\nrename from reftable/record.c\nrename to lib/reftable/record.c\ndiff --git a/reftable/record.h b/lib/reftable/record.h\nsimilarity index 100%\nrename from reftable/record.h\nrename to lib/reftable/record.h\ndiff --git a/reftable/reftable-basics.h b/lib/reftable/reftable-basics.h\nsimilarity index 100%\nrename from reftable/reftable-basics.h\nrename to lib/reftable/reftable-basics.h\ndiff --git a/reftable/reftable-block.h b/lib/reftable/reftable-block.h\nsimilarity index 100%\nrename from reftable/reftable-block.h\nrename to lib/reftable/reftable-block.h\ndiff --git a/reftable/reftable-blocksource.h b/lib/reftable/reftable-blocksource.h\nsimilarity index 100%\nrename from reftable/reftable-blocksource.h\nrename to lib/reftable/reftable-blocksource.h\ndiff --git a/reftable/reftable-constants.h b/lib/reftable/reftable-constants.h\nsimilarity index 100%\nrename from reftable/reftable-constants.h\nrename to lib/reftable/reftable-constants.h\ndiff --git a/reftable/reftable-error.h b/lib/reftable/reftable-error.h\nsimilarity index 100%\nrename from reftable/reftable-error.h\nrename to lib/reftable/reftable-error.h\ndiff --git a/reftable/reftable-fsck.h b/lib/reftable/reftable-fsck.h\nsimilarity index 100%\nrename from reftable/reftable-fsck.h\nrename to lib/reftable/reftable-fsck.h\ndiff --git a/reftable/reftable-iterator.h b/lib/reftable/reftable-iterator.h\nsimilarity index 100%\nrename from reftable/reftable-iterator.h\nrename to lib/reftable/reftable-iterator.h\ndiff --git a/reftable/reftable-merged.h b/lib/reftable/reftable-merged.h\nsimilarity index 100%\nrename from reftable/reftable-merged.h\nrename to lib/reftable/reftable-merged.h\ndiff --git a/reftable/reftable-record.h b/lib/reftable/reftable-record.h\nsimilarity index 100%\nrename from reftable/reftable-record.h\nrename to lib/reftable/reftable-record.h\ndiff --git a/reftable/reftable-stack.h b/lib/reftable/reftable-stack.h\nsimilarity index 100%\nrename from reftable/reftable-stack.h\nrename to lib/reftable/reftable-stack.h\ndiff --git a/reftable/reftable-system.h b/lib/reftable/reftable-system.h\nsimilarity index 100%\nrename from reftable/reftable-system.h\nrename to lib/reftable/reftable-system.h\ndiff --git a/reftable/reftable-table.h b/lib/reftable/reftable-table.h\nsimilarity index 100%\nrename from reftable/reftable-table.h\nrename to lib/reftable/reftable-table.h\ndiff --git a/reftable/reftable-writer.h b/lib/reftable/reftable-writer.h\nsimilarity index 100%\nrename from reftable/reftable-writer.h\nrename to lib/reftable/reftable-writer.h\ndiff --git a/reftable/stack.c b/lib/reftable/stack.c\nsimilarity index 100%\nrename from reftable/stack.c\nrename to lib/reftable/stack.c\ndiff --git a/reftable/stack.h b/lib/reftable/stack.h\nsimilarity index 100%\nrename from reftable/stack.h\nrename to lib/reftable/stack.h\ndiff --git a/reftable/system.c b/lib/reftable/system.c\nsimilarity index 100%\nrename from reftable/system.c\nrename to lib/reftable/system.c\ndiff --git a/reftable/system.h b/lib/reftable/system.h\nsimilarity index 100%\nrename from reftable/system.h\nrename to lib/reftable/system.h\ndiff --git a/reftable/table.c b/lib/reftable/table.c\nsimilarity index 100%\nrename from reftable/table.c\nrename to lib/reftable/table.c\ndiff --git a/reftable/table.h b/lib/reftable/table.h\nsimilarity index 100%\nrename from reftable/table.h\nrename to lib/reftable/table.h\ndiff --git a/reftable/tree.c b/lib/reftable/tree.c\nsimilarity index 100%\nrename from reftable/tree.c\nrename to lib/reftable/tree.c\ndiff --git a/reftable/tree.h b/lib/reftable/tree.h\nsimilarity index 100%\nrename from reftable/tree.h\nrename to lib/reftable/tree.h\ndiff --git a/reftable/writer.c b/lib/reftable/writer.c\nsimilarity index 100%\nrename from reftable/writer.c\nrename to lib/reftable/writer.c\ndiff --git a/reftable/writer.h b/lib/reftable/writer.h\nsimilarity index 100%\nrename from reftable/writer.h\nrename to lib/reftable/writer.h\ndiff --git a/remote.c b/lib/remote.c\nsimilarity index 100%\nrename from remote.c\nrename to lib/remote.c\ndiff --git a/remote.h b/lib/remote.h\nsimilarity index 100%\nrename from remote.h\nrename to lib/remote.h\ndiff --git a/repack-cruft.c b/lib/repack-cruft.c\nsimilarity index 100%\nrename from repack-cruft.c\nrename to lib/repack-cruft.c\ndiff --git a/repack-filtered.c b/lib/repack-filtered.c\nsimilarity index 100%\nrename from repack-filtered.c\nrename to lib/repack-filtered.c\ndiff --git a/repack-geometry.c b/lib/repack-geometry.c\nsimilarity index 100%\nrename from repack-geometry.c\nrename to lib/repack-geometry.c\ndiff --git a/repack-midx.c b/lib/repack-midx.c\nsimilarity index 100%\nrename from repack-midx.c\nrename to lib/repack-midx.c\ndiff --git a/repack-promisor.c b/lib/repack-promisor.c\nsimilarity index 100%\nrename from repack-promisor.c\nrename to lib/repack-promisor.c\ndiff --git a/repack.c b/lib/repack.c\nsimilarity index 100%\nrename from repack.c\nrename to lib/repack.c\ndiff --git a/repack.h b/lib/repack.h\nsimilarity index 100%\nrename from repack.h\nrename to lib/repack.h\ndiff --git a/replace-object.c b/lib/replace-object.c\nsimilarity index 100%\nrename from replace-object.c\nrename to lib/replace-object.c\ndiff --git a/replace-object.h b/lib/replace-object.h\nsimilarity index 100%\nrename from replace-object.h\nrename to lib/replace-object.h\ndiff --git a/replay.c b/lib/replay.c\nsimilarity index 100%\nrename from replay.c\nrename to lib/replay.c\ndiff --git a/replay.h b/lib/replay.h\nsimilarity index 100%\nrename from replay.h\nrename to lib/replay.h\ndiff --git a/repo-settings.c b/lib/repo-settings.c\nsimilarity index 100%\nrename from repo-settings.c\nrename to lib/repo-settings.c\ndiff --git a/repo-settings.h b/lib/repo-settings.h\nsimilarity index 100%\nrename from repo-settings.h\nrename to lib/repo-settings.h\ndiff --git a/repository.c b/lib/repository.c\nsimilarity index 100%\nrename from repository.c\nrename to lib/repository.c\ndiff --git a/repository.h b/lib/repository.h\nsimilarity index 100%\nrename from repository.h\nrename to lib/repository.h\ndiff --git a/rerere.c b/lib/rerere.c\nsimilarity index 100%\nrename from rerere.c\nrename to lib/rerere.c\ndiff --git a/rerere.h b/lib/rerere.h\nsimilarity index 100%\nrename from rerere.h\nrename to lib/rerere.h\ndiff --git a/reset.c b/lib/reset.c\nsimilarity index 100%\nrename from reset.c\nrename to lib/reset.c\ndiff --git a/reset.h b/lib/reset.h\nsimilarity index 100%\nrename from reset.h\nrename to lib/reset.h\ndiff --git a/resolve-undo.c b/lib/resolve-undo.c\nsimilarity index 100%\nrename from resolve-undo.c\nrename to lib/resolve-undo.c\ndiff --git a/resolve-undo.h b/lib/resolve-undo.h\nsimilarity index 100%\nrename from resolve-undo.h\nrename to lib/resolve-undo.h\ndiff --git a/revision.c b/lib/revision.c\nsimilarity index 100%\nrename from revision.c\nrename to lib/revision.c\ndiff --git a/revision.h b/lib/revision.h\nsimilarity index 100%\nrename from revision.h\nrename to lib/revision.h\ndiff --git a/run-command.c b/lib/run-command.c\nsimilarity index 100%\nrename from run-command.c\nrename to lib/run-command.c\ndiff --git a/run-command.h b/lib/run-command.h\nsimilarity index 100%\nrename from run-command.h\nrename to lib/run-command.h\ndiff --git a/sane-ctype.h b/lib/sane-ctype.h\nsimilarity index 100%\nrename from sane-ctype.h\nrename to lib/sane-ctype.h\ndiff --git a/send-pack.c b/lib/send-pack.c\nsimilarity index 100%\nrename from send-pack.c\nrename to lib/send-pack.c\ndiff --git a/send-pack.h b/lib/send-pack.h\nsimilarity index 100%\nrename from send-pack.h\nrename to lib/send-pack.h\ndiff --git a/sequencer.c b/lib/sequencer.c\nsimilarity index 100%\nrename from sequencer.c\nrename to lib/sequencer.c\ndiff --git a/sequencer.h b/lib/sequencer.h\nsimilarity index 100%\nrename from sequencer.h\nrename to lib/sequencer.h\ndiff --git a/serve.c b/lib/serve.c\nsimilarity index 100%\nrename from serve.c\nrename to lib/serve.c\ndiff --git a/serve.h b/lib/serve.h\nsimilarity index 100%\nrename from serve.h\nrename to lib/serve.h\ndiff --git a/server-info.c b/lib/server-info.c\nsimilarity index 100%\nrename from server-info.c\nrename to lib/server-info.c\ndiff --git a/server-info.h b/lib/server-info.h\nsimilarity index 100%\nrename from server-info.h\nrename to lib/server-info.h\ndiff --git a/setup.c b/lib/setup.c\nsimilarity index 100%\nrename from setup.c\nrename to lib/setup.c\ndiff --git a/setup.h b/lib/setup.h\nsimilarity index 100%\nrename from setup.h\nrename to lib/setup.h\ndiff --git a/sha1/openssl.h b/lib/sha1/openssl.h\nsimilarity index 100%\nrename from sha1/openssl.h\nrename to lib/sha1/openssl.h\ndiff --git a/sha1collisiondetection b/lib/sha1collisiondetection\nsimilarity index 100%\nrename from sha1collisiondetection\nrename to lib/sha1collisiondetection\ndiff --git a/sha1dc/.gitattributes b/lib/sha1dc/.gitattributes\nsimilarity index 100%\nrename from sha1dc/.gitattributes\nrename to lib/sha1dc/.gitattributes\ndiff --git a/sha1dc/LICENSE.txt b/lib/sha1dc/LICENSE.txt\nsimilarity index 100%\nrename from sha1dc/LICENSE.txt\nrename to lib/sha1dc/LICENSE.txt\ndiff --git a/sha1dc/sha1.c b/lib/sha1dc/sha1.c\nsimilarity index 100%\nrename from sha1dc/sha1.c\nrename to lib/sha1dc/sha1.c\ndiff --git a/sha1dc/sha1.h b/lib/sha1dc/sha1.h\nsimilarity index 100%\nrename from sha1dc/sha1.h\nrename to lib/sha1dc/sha1.h\ndiff --git a/sha1dc/ubc_check.c b/lib/sha1dc/ubc_check.c\nsimilarity index 100%\nrename from sha1dc/ubc_check.c\nrename to lib/sha1dc/ubc_check.c\ndiff --git a/sha1dc/ubc_check.h b/lib/sha1dc/ubc_check.h\nsimilarity index 100%\nrename from sha1dc/ubc_check.h\nrename to lib/sha1dc/ubc_check.h\ndiff --git a/sha1dc_git.c b/lib/sha1dc_git.c\nsimilarity index 100%\nrename from sha1dc_git.c\nrename to lib/sha1dc_git.c\ndiff --git a/sha1dc_git.h b/lib/sha1dc_git.h\nsimilarity index 100%\nrename from sha1dc_git.h\nrename to lib/sha1dc_git.h\ndiff --git a/sha256/block/sha256.c b/lib/sha256/block/sha256.c\nsimilarity index 100%\nrename from sha256/block/sha256.c\nrename to lib/sha256/block/sha256.c\ndiff --git a/sha256/block/sha256.h b/lib/sha256/block/sha256.h\nsimilarity index 100%\nrename from sha256/block/sha256.h\nrename to lib/sha256/block/sha256.h\ndiff --git a/sha256/gcrypt.h b/lib/sha256/gcrypt.h\nsimilarity index 100%\nrename from sha256/gcrypt.h\nrename to lib/sha256/gcrypt.h\ndiff --git a/sha256/nettle.h b/lib/sha256/nettle.h\nsimilarity index 100%\nrename from sha256/nettle.h\nrename to lib/sha256/nettle.h\ndiff --git a/sha256/openssl.h b/lib/sha256/openssl.h\nsimilarity index 100%\nrename from sha256/openssl.h\nrename to lib/sha256/openssl.h\ndiff --git a/shallow.c b/lib/shallow.c\nsimilarity index 100%\nrename from shallow.c\nrename to lib/shallow.c\ndiff --git a/shallow.h b/lib/shallow.h\nsimilarity index 100%\nrename from shallow.h\nrename to lib/shallow.h\ndiff --git a/shortlog.h b/lib/shortlog.h\nsimilarity index 100%\nrename from shortlog.h\nrename to lib/shortlog.h\ndiff --git a/sideband.c b/lib/sideband.c\nsimilarity index 100%\nrename from sideband.c\nrename to lib/sideband.c\ndiff --git a/sideband.h b/lib/sideband.h\nsimilarity index 100%\nrename from sideband.h\nrename to lib/sideband.h\ndiff --git a/sigchain.c b/lib/sigchain.c\nsimilarity index 100%\nrename from sigchain.c\nrename to lib/sigchain.c\ndiff --git a/sigchain.h b/lib/sigchain.h\nsimilarity index 100%\nrename from sigchain.h\nrename to lib/sigchain.h\ndiff --git a/simple-ipc.h b/lib/simple-ipc.h\nsimilarity index 100%\nrename from simple-ipc.h\nrename to lib/simple-ipc.h\ndiff --git a/sparse-index.c b/lib/sparse-index.c\nsimilarity index 100%\nrename from sparse-index.c\nrename to lib/sparse-index.c\ndiff --git a/sparse-index.h b/lib/sparse-index.h\nsimilarity index 100%\nrename from sparse-index.h\nrename to lib/sparse-index.h\ndiff --git a/split-index.c b/lib/split-index.c\nsimilarity index 100%\nrename from split-index.c\nrename to lib/split-index.c\ndiff --git a/split-index.h b/lib/split-index.h\nsimilarity index 100%\nrename from split-index.h\nrename to lib/split-index.h\ndiff --git a/stable-qsort.c b/lib/stable-qsort.c\nsimilarity index 100%\nrename from stable-qsort.c\nrename to lib/stable-qsort.c\ndiff --git a/statinfo.c b/lib/statinfo.c\nsimilarity index 100%\nrename from statinfo.c\nrename to lib/statinfo.c\ndiff --git a/statinfo.h b/lib/statinfo.h\nsimilarity index 100%\nrename from statinfo.h\nrename to lib/statinfo.h\ndiff --git a/strbuf.c b/lib/strbuf.c\nsimilarity index 100%\nrename from strbuf.c\nrename to lib/strbuf.c\ndiff --git a/strbuf.h b/lib/strbuf.h\nsimilarity index 100%\nrename from strbuf.h\nrename to lib/strbuf.h\ndiff --git a/string-list.c b/lib/string-list.c\nsimilarity index 100%\nrename from string-list.c\nrename to lib/string-list.c\ndiff --git a/string-list.h b/lib/string-list.h\nsimilarity index 100%\nrename from string-list.h\nrename to lib/string-list.h\ndiff --git a/strmap.c b/lib/strmap.c\nsimilarity index 100%\nrename from strmap.c\nrename to lib/strmap.c\ndiff --git a/strmap.h b/lib/strmap.h\nsimilarity index 100%\nrename from strmap.h\nrename to lib/strmap.h\ndiff --git a/strvec.c b/lib/strvec.c\nsimilarity index 100%\nrename from strvec.c\nrename to lib/strvec.c\ndiff --git a/strvec.h b/lib/strvec.h\nsimilarity index 100%\nrename from strvec.h\nrename to lib/strvec.h\ndiff --git a/sub-process.c b/lib/sub-process.c\nsimilarity index 100%\nrename from sub-process.c\nrename to lib/sub-process.c\ndiff --git a/sub-process.h b/lib/sub-process.h\nsimilarity index 100%\nrename from sub-process.h\nrename to lib/sub-process.h\ndiff --git a/submodule-config.c b/lib/submodule-config.c\nsimilarity index 100%\nrename from submodule-config.c\nrename to lib/submodule-config.c\ndiff --git a/submodule-config.h b/lib/submodule-config.h\nsimilarity index 100%\nrename from submodule-config.h\nrename to lib/submodule-config.h\ndiff --git a/submodule.c b/lib/submodule.c\nsimilarity index 100%\nrename from submodule.c\nrename to lib/submodule.c\ndiff --git a/submodule.h b/lib/submodule.h\nsimilarity index 100%\nrename from submodule.h\nrename to lib/submodule.h\ndiff --git a/symlinks.c b/lib/symlinks.c\nsimilarity index 100%\nrename from symlinks.c\nrename to lib/symlinks.c\ndiff --git a/symlinks.h b/lib/symlinks.h\nsimilarity index 100%\nrename from symlinks.h\nrename to lib/symlinks.h\ndiff --git a/tag.c b/lib/tag.c\nsimilarity index 100%\nrename from tag.c\nrename to lib/tag.c\ndiff --git a/tag.h b/lib/tag.h\nsimilarity index 100%\nrename from tag.h\nrename to lib/tag.h\ndiff --git a/tar.h b/lib/tar.h\nsimilarity index 100%\nrename from tar.h\nrename to lib/tar.h\ndiff --git a/tempfile.c b/lib/tempfile.c\nsimilarity index 100%\nrename from tempfile.c\nrename to lib/tempfile.c\ndiff --git a/tempfile.h b/lib/tempfile.h\nsimilarity index 100%\nrename from tempfile.h\nrename to lib/tempfile.h\ndiff --git a/thread-utils.c b/lib/thread-utils.c\nsimilarity index 100%\nrename from thread-utils.c\nrename to lib/thread-utils.c\ndiff --git a/thread-utils.h b/lib/thread-utils.h\nsimilarity index 100%\nrename from thread-utils.h\nrename to lib/thread-utils.h\ndiff --git a/tmp-objdir.c b/lib/tmp-objdir.c\nsimilarity index 100%\nrename from tmp-objdir.c\nrename to lib/tmp-objdir.c\ndiff --git a/tmp-objdir.h b/lib/tmp-objdir.h\nsimilarity index 100%\nrename from tmp-objdir.h\nrename to lib/tmp-objdir.h\ndiff --git a/trace.c b/lib/trace.c\nsimilarity index 100%\nrename from trace.c\nrename to lib/trace.c\ndiff --git a/trace.h b/lib/trace.h\nsimilarity index 100%\nrename from trace.h\nrename to lib/trace.h\ndiff --git a/trace2.c b/lib/trace2.c\nsimilarity index 100%\nrename from trace2.c\nrename to lib/trace2.c\ndiff --git a/trace2.h b/lib/trace2.h\nsimilarity index 100%\nrename from trace2.h\nrename to lib/trace2.h\ndiff --git a/trace2/tr2_cfg.c b/lib/trace2/tr2_cfg.c\nsimilarity index 100%\nrename from trace2/tr2_cfg.c\nrename to lib/trace2/tr2_cfg.c\ndiff --git a/trace2/tr2_cfg.h b/lib/trace2/tr2_cfg.h\nsimilarity index 100%\nrename from trace2/tr2_cfg.h\nrename to lib/trace2/tr2_cfg.h\ndiff --git a/trace2/tr2_cmd_name.c b/lib/trace2/tr2_cmd_name.c\nsimilarity index 100%\nrename from trace2/tr2_cmd_name.c\nrename to lib/trace2/tr2_cmd_name.c\ndiff --git a/trace2/tr2_cmd_name.h b/lib/trace2/tr2_cmd_name.h\nsimilarity index 100%\nrename from trace2/tr2_cmd_name.h\nrename to lib/trace2/tr2_cmd_name.h\ndiff --git a/trace2/tr2_ctr.c b/lib/trace2/tr2_ctr.c\nsimilarity index 100%\nrename from trace2/tr2_ctr.c\nrename to lib/trace2/tr2_ctr.c\ndiff --git a/trace2/tr2_ctr.h b/lib/trace2/tr2_ctr.h\nsimilarity index 100%\nrename from trace2/tr2_ctr.h\nrename to lib/trace2/tr2_ctr.h\ndiff --git a/trace2/tr2_dst.c b/lib/trace2/tr2_dst.c\nsimilarity index 100%\nrename from trace2/tr2_dst.c\nrename to lib/trace2/tr2_dst.c\ndiff --git a/trace2/tr2_dst.h b/lib/trace2/tr2_dst.h\nsimilarity index 100%\nrename from trace2/tr2_dst.h\nrename to lib/trace2/tr2_dst.h\ndiff --git a/trace2/tr2_sid.c b/lib/trace2/tr2_sid.c\nsimilarity index 100%\nrename from trace2/tr2_sid.c\nrename to lib/trace2/tr2_sid.c\ndiff --git a/trace2/tr2_sid.h b/lib/trace2/tr2_sid.h\nsimilarity index 100%\nrename from trace2/tr2_sid.h\nrename to lib/trace2/tr2_sid.h\ndiff --git a/trace2/tr2_sysenv.c b/lib/trace2/tr2_sysenv.c\nsimilarity index 100%\nrename from trace2/tr2_sysenv.c\nrename to lib/trace2/tr2_sysenv.c\ndiff --git a/trace2/tr2_sysenv.h b/lib/trace2/tr2_sysenv.h\nsimilarity index 100%\nrename from trace2/tr2_sysenv.h\nrename to lib/trace2/tr2_sysenv.h\ndiff --git a/trace2/tr2_tbuf.c b/lib/trace2/tr2_tbuf.c\nsimilarity index 100%\nrename from trace2/tr2_tbuf.c\nrename to lib/trace2/tr2_tbuf.c\ndiff --git a/trace2/tr2_tbuf.h b/lib/trace2/tr2_tbuf.h\nsimilarity index 100%\nrename from trace2/tr2_tbuf.h\nrename to lib/trace2/tr2_tbuf.h\ndiff --git a/trace2/tr2_tgt.h b/lib/trace2/tr2_tgt.h\nsimilarity index 100%\nrename from trace2/tr2_tgt.h\nrename to lib/trace2/tr2_tgt.h\ndiff --git a/trace2/tr2_tgt_event.c b/lib/trace2/tr2_tgt_event.c\nsimilarity index 100%\nrename from trace2/tr2_tgt_event.c\nrename to lib/trace2/tr2_tgt_event.c\ndiff --git a/trace2/tr2_tgt_normal.c b/lib/trace2/tr2_tgt_normal.c\nsimilarity index 100%\nrename from trace2/tr2_tgt_normal.c\nrename to lib/trace2/tr2_tgt_normal.c\ndiff --git a/trace2/tr2_tgt_perf.c b/lib/trace2/tr2_tgt_perf.c\nsimilarity index 100%\nrename from trace2/tr2_tgt_perf.c\nrename to lib/trace2/tr2_tgt_perf.c\ndiff --git a/trace2/tr2_tls.c b/lib/trace2/tr2_tls.c\nsimilarity index 100%\nrename from trace2/tr2_tls.c\nrename to lib/trace2/tr2_tls.c\ndiff --git a/trace2/tr2_tls.h b/lib/trace2/tr2_tls.h\nsimilarity index 100%\nrename from trace2/tr2_tls.h\nrename to lib/trace2/tr2_tls.h\ndiff --git a/trace2/tr2_tmr.c b/lib/trace2/tr2_tmr.c\nsimilarity index 100%\nrename from trace2/tr2_tmr.c\nrename to lib/trace2/tr2_tmr.c\ndiff --git a/trace2/tr2_tmr.h b/lib/trace2/tr2_tmr.h\nsimilarity index 100%\nrename from trace2/tr2_tmr.h\nrename to lib/trace2/tr2_tmr.h\ndiff --git a/trailer.c b/lib/trailer.c\nsimilarity index 100%\nrename from trailer.c\nrename to lib/trailer.c\ndiff --git a/trailer.h b/lib/trailer.h\nsimilarity index 100%\nrename from trailer.h\nrename to lib/trailer.h\ndiff --git a/transport-helper.c b/lib/transport-helper.c\nsimilarity index 100%\nrename from transport-helper.c\nrename to lib/transport-helper.c\ndiff --git a/transport-internal.h b/lib/transport-internal.h\nsimilarity index 100%\nrename from transport-internal.h\nrename to lib/transport-internal.h\ndiff --git a/transport.c b/lib/transport.c\nsimilarity index 100%\nrename from transport.c\nrename to lib/transport.c\ndiff --git a/transport.h b/lib/transport.h\nsimilarity index 100%\nrename from transport.h\nrename to lib/transport.h\ndiff --git a/tree-diff.c b/lib/tree-diff.c\nsimilarity index 100%\nrename from tree-diff.c\nrename to lib/tree-diff.c\ndiff --git a/tree-walk.c b/lib/tree-walk.c\nsimilarity index 100%\nrename from tree-walk.c\nrename to lib/tree-walk.c\ndiff --git a/tree-walk.h b/lib/tree-walk.h\nsimilarity index 100%\nrename from tree-walk.h\nrename to lib/tree-walk.h\ndiff --git a/tree.c b/lib/tree.c\nsimilarity index 100%\nrename from tree.c\nrename to lib/tree.c\ndiff --git a/tree.h b/lib/tree.h\nsimilarity index 100%\nrename from tree.h\nrename to lib/tree.h\ndiff --git a/unicode-width.h b/lib/unicode-width.h\nsimilarity index 100%\nrename from unicode-width.h\nrename to lib/unicode-width.h\ndiff --git a/unix-socket.c b/lib/unix-socket.c\nsimilarity index 100%\nrename from unix-socket.c\nrename to lib/unix-socket.c\ndiff --git a/unix-socket.h b/lib/unix-socket.h\nsimilarity index 100%\nrename from unix-socket.h\nrename to lib/unix-socket.h\ndiff --git a/unix-stream-server.c b/lib/unix-stream-server.c\nsimilarity index 100%\nrename from unix-stream-server.c\nrename to lib/unix-stream-server.c\ndiff --git a/unix-stream-server.h b/lib/unix-stream-server.h\nsimilarity index 100%\nrename from unix-stream-server.h\nrename to lib/unix-stream-server.h\ndiff --git a/unpack-trees.c b/lib/unpack-trees.c\nsimilarity index 100%\nrename from unpack-trees.c\nrename to lib/unpack-trees.c\ndiff --git a/unpack-trees.h b/lib/unpack-trees.h\nsimilarity index 100%\nrename from unpack-trees.h\nrename to lib/unpack-trees.h\ndiff --git a/upload-pack.c b/lib/upload-pack.c\nsimilarity index 100%\nrename from upload-pack.c\nrename to lib/upload-pack.c\ndiff --git a/upload-pack.h b/lib/upload-pack.h\nsimilarity index 100%\nrename from upload-pack.h\nrename to lib/upload-pack.h\ndiff --git a/url.c b/lib/url.c\nsimilarity index 100%\nrename from url.c\nrename to lib/url.c\ndiff --git a/url.h b/lib/url.h\nsimilarity index 100%\nrename from url.h\nrename to lib/url.h\ndiff --git a/urlmatch.c b/lib/urlmatch.c\nsimilarity index 100%\nrename from urlmatch.c\nrename to lib/urlmatch.c\ndiff --git a/urlmatch.h b/lib/urlmatch.h\nsimilarity index 100%\nrename from urlmatch.h\nrename to lib/urlmatch.h\ndiff --git a/usage.c b/lib/usage.c\nsimilarity index 100%\nrename from usage.c\nrename to lib/usage.c\ndiff --git a/userdiff.c b/lib/userdiff.c\nsimilarity index 100%\nrename from userdiff.c\nrename to lib/userdiff.c\ndiff --git a/userdiff.h b/lib/userdiff.h\nsimilarity index 100%\nrename from userdiff.h\nrename to lib/userdiff.h\ndiff --git a/utf8.c b/lib/utf8.c\nsimilarity index 100%\nrename from utf8.c\nrename to lib/utf8.c\ndiff --git a/utf8.h b/lib/utf8.h\nsimilarity index 100%\nrename from utf8.h\nrename to lib/utf8.h\ndiff --git a/varint.c b/lib/varint.c\nsimilarity index 100%\nrename from varint.c\nrename to lib/varint.c\ndiff --git a/varint.h b/lib/varint.h\nsimilarity index 100%\nrename from varint.h\nrename to lib/varint.h\ndiff --git a/version-def.h.in b/lib/version-def.h.in\nsimilarity index 100%\nrename from version-def.h.in\nrename to lib/version-def.h.in\ndiff --git a/version.c b/lib/version.c\nsimilarity index 100%\nrename from version.c\nrename to lib/version.c\ndiff --git a/version.h b/lib/version.h\nsimilarity index 100%\nrename from version.h\nrename to lib/version.h\ndiff --git a/versioncmp.c b/lib/versioncmp.c\nsimilarity index 100%\nrename from versioncmp.c\nrename to lib/versioncmp.c\ndiff --git a/versioncmp.h b/lib/versioncmp.h\nsimilarity index 100%\nrename from versioncmp.h\nrename to lib/versioncmp.h\ndiff --git a/walker.c b/lib/walker.c\nsimilarity index 100%\nrename from walker.c\nrename to lib/walker.c\ndiff --git a/walker.h b/lib/walker.h\nsimilarity index 100%\nrename from walker.h\nrename to lib/walker.h\ndiff --git a/wildmatch.c b/lib/wildmatch.c\nsimilarity index 100%\nrename from wildmatch.c\nrename to lib/wildmatch.c\ndiff --git a/wildmatch.h b/lib/wildmatch.h\nsimilarity index 100%\nrename from wildmatch.h\nrename to lib/wildmatch.h\ndiff --git a/worktree.c b/lib/worktree.c\nsimilarity index 100%\nrename from worktree.c\nrename to lib/worktree.c\ndiff --git a/worktree.h b/lib/worktree.h\nsimilarity index 100%\nrename from worktree.h\nrename to lib/worktree.h\ndiff --git a/wrapper.c b/lib/wrapper.c\nsimilarity index 100%\nrename from wrapper.c\nrename to lib/wrapper.c\ndiff --git a/wrapper.h b/lib/wrapper.h\nsimilarity index 100%\nrename from wrapper.h\nrename to lib/wrapper.h\ndiff --git a/write-or-die.c b/lib/write-or-die.c\nsimilarity index 100%\nrename from write-or-die.c\nrename to lib/write-or-die.c\ndiff --git a/write-or-die.h b/lib/write-or-die.h\nsimilarity index 100%\nrename from write-or-die.h\nrename to lib/write-or-die.h\ndiff --git a/ws.c b/lib/ws.c\nsimilarity index 100%\nrename from ws.c\nrename to lib/ws.c\ndiff --git a/ws.h b/lib/ws.h\nsimilarity index 100%\nrename from ws.h\nrename to lib/ws.h\ndiff --git a/wt-status.c b/lib/wt-status.c\nsimilarity index 100%\nrename from wt-status.c\nrename to lib/wt-status.c\ndiff --git a/wt-status.h b/lib/wt-status.h\nsimilarity index 100%\nrename from wt-status.h\nrename to lib/wt-status.h\ndiff --git a/xdiff-interface.c b/lib/xdiff-interface.c\nsimilarity index 100%\nrename from xdiff-interface.c\nrename to lib/xdiff-interface.c\ndiff --git a/xdiff-interface.h b/lib/xdiff-interface.h\nsimilarity index 100%\nrename from xdiff-interface.h\nrename to lib/xdiff-interface.h\ndiff --git a/xdiff/xdiff.h b/lib/xdiff/xdiff.h\nsimilarity index 100%\nrename from xdiff/xdiff.h\nrename to lib/xdiff/xdiff.h\ndiff --git a/xdiff/xdiffi.c b/lib/xdiff/xdiffi.c\nsimilarity index 100%\nrename from xdiff/xdiffi.c\nrename to lib/xdiff/xdiffi.c\ndiff --git a/xdiff/xdiffi.h b/lib/xdiff/xdiffi.h\nsimilarity index 100%\nrename from xdiff/xdiffi.h\nrename to lib/xdiff/xdiffi.h\ndiff --git a/xdiff/xemit.c b/lib/xdiff/xemit.c\nsimilarity index 100%\nrename from xdiff/xemit.c\nrename to lib/xdiff/xemit.c\ndiff --git a/xdiff/xemit.h b/lib/xdiff/xemit.h\nsimilarity index 100%\nrename from xdiff/xemit.h\nrename to lib/xdiff/xemit.h\ndiff --git a/xdiff/xhistogram.c b/lib/xdiff/xhistogram.c\nsimilarity index 100%\nrename from xdiff/xhistogram.c\nrename to lib/xdiff/xhistogram.c\ndiff --git a/xdiff/xinclude.h b/lib/xdiff/xinclude.h\nsimilarity index 100%\nrename from xdiff/xinclude.h\nrename to lib/xdiff/xinclude.h\ndiff --git a/xdiff/xmacros.h b/lib/xdiff/xmacros.h\nsimilarity index 100%\nrename from xdiff/xmacros.h\nrename to lib/xdiff/xmacros.h\ndiff --git a/xdiff/xmerge.c b/lib/xdiff/xmerge.c\nsimilarity index 100%\nrename from xdiff/xmerge.c\nrename to lib/xdiff/xmerge.c\ndiff --git a/xdiff/xpatience.c b/lib/xdiff/xpatience.c\nsimilarity index 100%\nrename from xdiff/xpatience.c\nrename to lib/xdiff/xpatience.c\ndiff --git a/xdiff/xprepare.c b/lib/xdiff/xprepare.c\nsimilarity index 100%\nrename from xdiff/xprepare.c\nrename to lib/xdiff/xprepare.c\ndiff --git a/xdiff/xprepare.h b/lib/xdiff/xprepare.h\nsimilarity index 100%\nrename from xdiff/xprepare.h\nrename to lib/xdiff/xprepare.h\ndiff --git a/xdiff/xtypes.h b/lib/xdiff/xtypes.h\nsimilarity index 100%\nrename from xdiff/xtypes.h\nrename to lib/xdiff/xtypes.h\ndiff --git a/xdiff/xutils.c b/lib/xdiff/xutils.c\nsimilarity index 100%\nrename from xdiff/xutils.c\nrename to lib/xdiff/xutils.c\ndiff --git a/xdiff/xutils.h b/lib/xdiff/xutils.h\nsimilarity index 100%\nrename from xdiff/xutils.h\nrename to lib/xdiff/xutils.h\ndiff --git a/meson.build b/meson.build\nindex ca235801cf..2f90bed441 100644\n--- a/meson.build\n+++ b/meson.build\n@@ -272,293 +272,293 @@ version_gen_environment.set('GIT_VERSION', get_option('version'))\n compiler = meson.get_compiler('c')\n \n compat_sources = [\n-  'compat/nonblock.c',\n-  'compat/obstack.c',\n-  'compat/open.c',\n-  'compat/terminal.c',\n+  'lib/compat/nonblock.c',\n+  'lib/compat/obstack.c',\n+  'lib/compat/open.c',\n+  'lib/compat/terminal.c',\n ]\n \n libgit_sources = [\n-  'abspath.c',\n-  'add-interactive.c',\n-  'add-patch.c',\n-  'advice.c',\n-  'alias.c',\n-  'alloc.c',\n-  'apply.c',\n-  'archive-tar.c',\n-  'archive-zip.c',\n-  'archive.c',\n-  'attr.c',\n-  'base85.c',\n-  'bisect.c',\n-  'blame.c',\n-  'blob.c',\n-  'bloom.c',\n-  'branch.c',\n-  'bundle-uri.c',\n-  'bundle.c',\n-  'cache-tree.c',\n-  'cbtree.c',\n-  'chdir-notify.c',\n-  'checkout.c',\n-  'chunk-format.c',\n-  'color.c',\n-  'column.c',\n-  'combine-diff.c',\n-  'commit-graph.c',\n-  'commit-reach.c',\n-  'commit.c',\n-  'common-exit.c',\n-  'common-init.c',\n-  'compiler-tricks/not-constant.c',\n-  'config.c',\n-  'connect.c',\n-  'connected.c',\n-  'convert.c',\n-  'copy.c',\n-  'credential.c',\n-  'csum-file.c',\n-  'ctype.c',\n-  'date.c',\n-  'decorate.c',\n-  'delta-islands.c',\n-  'diagnose.c',\n-  'diff-delta.c',\n-  'diff-merges.c',\n-  'diff-lib.c',\n-  'diff-no-index.c',\n-  'diff.c',\n-  'diffcore-break.c',\n-  'diffcore-delta.c',\n-  'diffcore-order.c',\n-  'diffcore-pickaxe.c',\n-  'diffcore-rename.c',\n-  'diffcore-rotate.c',\n-  'dir-iterator.c',\n-  'dir.c',\n-  'editor.c',\n-  'entry.c',\n-  'environment.c',\n-  'ewah/bitmap.c',\n-  'ewah/ewah_bitmap.c',\n-  'ewah/ewah_io.c',\n-  'ewah/ewah_rlw.c',\n-  'exec-cmd.c',\n-  'fetch-negotiator.c',\n-  'fetch-pack.c',\n-  'fmt-merge-msg.c',\n-  'fsck.c',\n-  'fsmonitor.c',\n-  'fsmonitor-ipc.c',\n-  'fsmonitor-settings.c',\n-  'gettext.c',\n-  'git-zlib.c',\n-  'gpg-interface.c',\n-  'graph.c',\n-  'grep.c',\n-  'hash-lookup.c',\n-  'hash.c',\n-  'hashmap.c',\n-  'help.c',\n-  'hex.c',\n-  'hex-ll.c',\n-  'hook.c',\n-  'ident.c',\n-  'json-writer.c',\n-  'kwset.c',\n-  'levenshtein.c',\n-  'line-log.c',\n-  'line-range.c',\n-  'linear-assignment.c',\n-  'list-objects-filter-options.c',\n-  'list-objects-filter.c',\n-  'list-objects.c',\n-  'lockfile.c',\n-  'log-tree.c',\n-  'loose.c',\n-  'ls-refs.c',\n-  'mailinfo.c',\n-  'mailmap.c',\n-  'match-trees.c',\n-  'mem-pool.c',\n-  'merge-blobs.c',\n-  'merge-ll.c',\n-  'merge-ort.c',\n-  'merge-ort-wrappers.c',\n-  'merge.c',\n-  'midx.c',\n-  'midx-write.c',\n-  'name-hash.c',\n-  'negotiator/default.c',\n-  'negotiator/noop.c',\n-  'negotiator/skipping.c',\n-  'notes-cache.c',\n-  'notes-merge.c',\n-  'notes-utils.c',\n-  'notes.c',\n-  'object-file-convert.c',\n-  'object-file.c',\n-  'object-name.c',\n-  'object.c',\n-  'odb.c',\n-  'odb/source.c',\n-  'odb/source-files.c',\n-  'odb/source-inmemory.c',\n-  'odb/source-loose.c',\n-  'odb/source-packed.c',\n-  'odb/streaming.c',\n-  'odb/transaction.c',\n-  'oid-array.c',\n-  'oidmap.c',\n-  'oidset.c',\n-  'oidtree.c',\n-  'pack-bitmap-write.c',\n-  'pack-bitmap.c',\n-  'pack-check.c',\n-  'pack-mtimes.c',\n-  'pack-objects.c',\n-  'pack-refs.c',\n-  'pack-revindex.c',\n-  'pack-write.c',\n-  'packfile.c',\n-  'packfile-list.c',\n-  'pager.c',\n-  'parallel-checkout.c',\n-  'parse.c',\n-  'parse-options-cb.c',\n-  'parse-options.c',\n-  'patch-delta.c',\n-  'patch-ids.c',\n-  'path.c',\n-  'path-walk.c',\n-  'pathspec.c',\n-  'pkt-line.c',\n-  'preload-index.c',\n-  'pretty.c',\n-  'prio-queue.c',\n-  'progress.c',\n-  'promisor-remote.c',\n-  'prompt.c',\n-  'protocol.c',\n-  'protocol-caps.c',\n-  'prune-packed.c',\n-  'pseudo-merge.c',\n-  'quote.c',\n-  'range-diff.c',\n-  'reachable.c',\n-  'read-cache.c',\n-  'rebase-interactive.c',\n-  'rebase.c',\n-  'ref-filter.c',\n-  'reflog-walk.c',\n-  'reflog.c',\n-  'refs.c',\n-  'refs/debug.c',\n-  'refs/files-backend.c',\n-  'refs/reftable-backend.c',\n-  'refs/iterator.c',\n-  'refs/packed-backend.c',\n-  'refs/ref-cache.c',\n-  'refspec.c',\n-  'reftable/basics.c',\n-  'reftable/error.c',\n-  'reftable/block.c',\n-  'reftable/blocksource.c',\n-  'reftable/fsck.c',\n-  'reftable/iter.c',\n-  'reftable/merged.c',\n-  'reftable/pq.c',\n-  'reftable/record.c',\n-  'reftable/stack.c',\n-  'reftable/system.c',\n-  'reftable/table.c',\n-  'reftable/tree.c',\n-  'reftable/writer.c',\n-  'remote.c',\n-  'repack.c',\n-  'repack-cruft.c',\n-  'repack-filtered.c',\n-  'repack-geometry.c',\n-  'repack-midx.c',\n-  'repack-promisor.c',\n-  'replace-object.c',\n-  'replay.c',\n-  'repo-settings.c',\n-  'repository.c',\n-  'rerere.c',\n-  'reset.c',\n-  'resolve-undo.c',\n-  'revision.c',\n-  'run-command.c',\n-  'send-pack.c',\n-  'sequencer.c',\n-  'serve.c',\n-  'server-info.c',\n-  'setup.c',\n-  'shallow.c',\n-  'sideband.c',\n-  'sigchain.c',\n-  'sparse-index.c',\n-  'split-index.c',\n-  'stable-qsort.c',\n-  'statinfo.c',\n-  'strbuf.c',\n-  'string-list.c',\n-  'strmap.c',\n-  'strvec.c',\n-  'sub-process.c',\n-  'submodule-config.c',\n-  'submodule.c',\n-  'symlinks.c',\n-  'tag.c',\n-  'tempfile.c',\n-  'thread-utils.c',\n-  'tmp-objdir.c',\n-  'trace.c',\n-  'trace2.c',\n-  'trace2/tr2_cfg.c',\n-  'trace2/tr2_cmd_name.c',\n-  'trace2/tr2_ctr.c',\n-  'trace2/tr2_dst.c',\n-  'trace2/tr2_sid.c',\n-  'trace2/tr2_sysenv.c',\n-  'trace2/tr2_tbuf.c',\n-  'trace2/tr2_tgt_event.c',\n-  'trace2/tr2_tgt_normal.c',\n-  'trace2/tr2_tgt_perf.c',\n-  'trace2/tr2_tls.c',\n-  'trace2/tr2_tmr.c',\n-  'trailer.c',\n-  'transport-helper.c',\n-  'transport.c',\n-  'tree-diff.c',\n-  'tree-walk.c',\n-  'tree.c',\n-  'unpack-trees.c',\n-  'upload-pack.c',\n-  'url.c',\n-  'urlmatch.c',\n-  'usage.c',\n-  'userdiff.c',\n-  'utf8.c',\n-  'version.c',\n-  'versioncmp.c',\n-  'walker.c',\n-  'wildmatch.c',\n-  'worktree.c',\n-  'wrapper.c',\n-  'write-or-die.c',\n-  'ws.c',\n-  'wt-status.c',\n-  'xdiff-interface.c',\n-  'xdiff/xdiffi.c',\n-  'xdiff/xemit.c',\n-  'xdiff/xhistogram.c',\n-  'xdiff/xmerge.c',\n-  'xdiff/xpatience.c',\n-  'xdiff/xprepare.c',\n-  'xdiff/xutils.c',\n+  'lib/abspath.c',\n+  'lib/add-interactive.c',\n+  'lib/add-patch.c',\n+  'lib/advice.c',\n+  'lib/alias.c',\n+  'lib/alloc.c',\n+  'lib/apply.c',\n+  'lib/archive-tar.c',\n+  'lib/archive-zip.c',\n+  'lib/archive.c',\n+  'lib/attr.c',\n+  'lib/base85.c',\n+  'lib/bisect.c',\n+  'lib/blame.c',\n+  'lib/blob.c',\n+  'lib/bloom.c',\n+  'lib/branch.c',\n+  'lib/bundle-uri.c',\n+  'lib/bundle.c',\n+  'lib/cache-tree.c',\n+  'lib/cbtree.c',\n+  'lib/chdir-notify.c',\n+  'lib/checkout.c',\n+  'lib/chunk-format.c',\n+  'lib/color.c',\n+  'lib/column.c',\n+  'lib/combine-diff.c',\n+  'lib/commit-graph.c',\n+  'lib/commit-reach.c',\n+  'lib/commit.c',\n+  'lib/common-exit.c',\n+  'lib/common-init.c',\n+  'lib/compiler-tricks/not-constant.c',\n+  'lib/config.c',\n+  'lib/connect.c',\n+  'lib/connected.c',\n+  'lib/convert.c',\n+  'lib/copy.c',\n+  'lib/credential.c',\n+  'lib/csum-file.c',\n+  'lib/ctype.c',\n+  'lib/date.c',\n+  'lib/decorate.c',\n+  'lib/delta-islands.c',\n+  'lib/diagnose.c',\n+  'lib/diff-delta.c',\n+  'lib/diff-merges.c',\n+  'lib/diff-lib.c',\n+  'lib/diff-no-index.c',\n+  'lib/diff.c',\n+  'lib/diffcore-break.c',\n+  'lib/diffcore-delta.c',\n+  'lib/diffcore-order.c',\n+  'lib/diffcore-pickaxe.c',\n+  'lib/diffcore-rename.c',\n+  'lib/diffcore-rotate.c',\n+  'lib/dir-iterator.c',\n+  'lib/dir.c',\n+  'lib/editor.c',\n+  'lib/entry.c',\n+  'lib/environment.c',\n+  'lib/ewah/bitmap.c',\n+  'lib/ewah/ewah_bitmap.c',\n+  'lib/ewah/ewah_io.c',\n+  'lib/ewah/ewah_rlw.c',\n+  'lib/exec-cmd.c',\n+  'lib/fetch-negotiator.c',\n+  'lib/fetch-pack.c',\n+  'lib/fmt-merge-msg.c',\n+  'lib/fsck.c',\n+  'lib/fsmonitor.c',\n+  'lib/fsmonitor-ipc.c',\n+  'lib/fsmonitor-settings.c',\n+  'lib/gettext.c',\n+  'lib/git-zlib.c',\n+  'lib/gpg-interface.c',\n+  'lib/graph.c',\n+  'lib/grep.c',\n+  'lib/hash-lookup.c',\n+  'lib/hash.c',\n+  'lib/hashmap.c',\n+  'lib/help.c',\n+  'lib/hex.c',\n+  'lib/hex-ll.c',\n+  'lib/hook.c',\n+  'lib/ident.c',\n+  'lib/json-writer.c',\n+  'lib/kwset.c',\n+  'lib/levenshtein.c',\n+  'lib/line-log.c',\n+  'lib/line-range.c',\n+  'lib/linear-assignment.c',\n+  'lib/list-objects-filter-options.c',\n+  'lib/list-objects-filter.c',\n+  'lib/list-objects.c',\n+  'lib/lockfile.c',\n+  'lib/log-tree.c',\n+  'lib/loose.c',\n+  'lib/ls-refs.c',\n+  'lib/mailinfo.c',\n+  'lib/mailmap.c',\n+  'lib/match-trees.c',\n+  'lib/mem-pool.c',\n+  'lib/merge-blobs.c',\n+  'lib/merge-ll.c',\n+  'lib/merge-ort.c',\n+  'lib/merge-ort-wrappers.c',\n+  'lib/merge.c',\n+  'lib/midx.c',\n+  'lib/midx-write.c',\n+  'lib/name-hash.c',\n+  'lib/negotiator/default.c',\n+  'lib/negotiator/noop.c',\n+  'lib/negotiator/skipping.c',\n+  'lib/notes-cache.c',\n+  'lib/notes-merge.c',\n+  'lib/notes-utils.c',\n+  'lib/notes.c',\n+  'lib/object-file-convert.c',\n+  'lib/object-file.c',\n+  'lib/object-name.c',\n+  'lib/object.c',\n+  'lib/odb.c',\n+  'lib/odb/source.c',\n+  'lib/odb/source-files.c',\n+  'lib/odb/source-inmemory.c',\n+  'lib/odb/source-loose.c',\n+  'lib/odb/source-packed.c',\n+  'lib/odb/streaming.c',\n+  'lib/odb/transaction.c',\n+  'lib/oid-array.c',\n+  'lib/oidmap.c',\n+  'lib/oidset.c',\n+  'lib/oidtree.c',\n+  'lib/pack-bitmap-write.c',\n+  'lib/pack-bitmap.c',\n+  'lib/pack-check.c',\n+  'lib/pack-mtimes.c',\n+  'lib/pack-objects.c',\n+  'lib/pack-refs.c',\n+  'lib/pack-revindex.c',\n+  'lib/pack-write.c',\n+  'lib/packfile.c',\n+  'lib/packfile-list.c',\n+  'lib/pager.c',\n+  'lib/parallel-checkout.c',\n+  'lib/parse.c',\n+  'lib/parse-options-cb.c',\n+  'lib/parse-options.c',\n+  'lib/patch-delta.c',\n+  'lib/patch-ids.c',\n+  'lib/path.c',\n+  'lib/path-walk.c',\n+  'lib/pathspec.c',\n+  'lib/pkt-line.c',\n+  'lib/preload-index.c',\n+  'lib/pretty.c',\n+  'lib/prio-queue.c',\n+  'lib/progress.c',\n+  'lib/promisor-remote.c',\n+  'lib/prompt.c',\n+  'lib/protocol.c',\n+  'lib/protocol-caps.c',\n+  'lib/prune-packed.c',\n+  'lib/pseudo-merge.c',\n+  'lib/quote.c',\n+  'lib/range-diff.c',\n+  'lib/reachable.c',\n+  'lib/read-cache.c',\n+  'lib/rebase-interactive.c',\n+  'lib/rebase.c',\n+  'lib/ref-filter.c',\n+  'lib/reflog-walk.c',\n+  'lib/reflog.c',\n+  'lib/refs.c',\n+  'lib/refs/debug.c',\n+  'lib/refs/files-backend.c',\n+  'lib/refs/reftable-backend.c',\n+  'lib/refs/iterator.c',\n+  'lib/refs/packed-backend.c',\n+  'lib/refs/ref-cache.c',\n+  'lib/refspec.c',\n+  'lib/reftable/basics.c',\n+  'lib/reftable/error.c',\n+  'lib/reftable/block.c',\n+  'lib/reftable/blocksource.c',\n+  'lib/reftable/fsck.c',\n+  'lib/reftable/iter.c',\n+  'lib/reftable/merged.c',\n+  'lib/reftable/pq.c',\n+  'lib/reftable/record.c',\n+  'lib/reftable/stack.c',\n+  'lib/reftable/system.c',\n+  'lib/reftable/table.c',\n+  'lib/reftable/tree.c',\n+  'lib/reftable/writer.c',\n+  'lib/remote.c',\n+  'lib/repack.c',\n+  'lib/repack-cruft.c',\n+  'lib/repack-filtered.c',\n+  'lib/repack-geometry.c',\n+  'lib/repack-midx.c',\n+  'lib/repack-promisor.c',\n+  'lib/replace-object.c',\n+  'lib/replay.c',\n+  'lib/repo-settings.c',\n+  'lib/repository.c',\n+  'lib/rerere.c',\n+  'lib/reset.c',\n+  'lib/resolve-undo.c',\n+  'lib/revision.c',\n+  'lib/run-command.c',\n+  'lib/send-pack.c',\n+  'lib/sequencer.c',\n+  'lib/serve.c',\n+  'lib/server-info.c',\n+  'lib/setup.c',\n+  'lib/shallow.c',\n+  'lib/sideband.c',\n+  'lib/sigchain"},{"id":"547949","messageId":"alR9GDNTbdjWB4dq@szeder.dev","threadId":"65899","inReplyTo":"20260701-pks-libgit-in-subdir-v3-2-5e4860056094@pks.im","subject":"Re: [PATCH RFC v3 2/2] Move libgit.a sources into separate \"lib/\" directory","fromName":"SZEDER Gábor","fromEmail":"szeder.dev@gmail.com","sentAt":"2026-07-13T05:52:24Z","receivedAt":"2026-07-13T05:52:27Z","isPatch":true,"body":"On Wed, Jul 01, 2026 at 08:59:27AM +0200, Patrick Steinhardt wrote:\n> This move does not come for free though:\n> \n>   - The mass rename introduces a cutoff point in the history of every\n>     moved file, as tools like git-log(1) do not follow renames by\n>     default.\n> \n>   - Any in-flight or not-yet-submitted topic that touches the moved\n>     files will have to be rebased, and backporting fixes across the\n>     boundary becomes more cumbersome as a patch can no longer apply\n>     cleanly to both the old and the new layout.\n> \n> My own (obviously subjective and biased) take is that the tradeoff is\n> worth it, as these issues are a one-time cost while the benefits to\n> discoverability will be permanent.\n\nIt is not a one-time cost, but will be an ongoing burden.\n\n> Furthermore, especially the first downside is a limitation in Git\n> itself. We're not the first or last project to do such a mass rename. So\n> if our provided tools are insufficient, then we should improve them to\n> make the experience better for other projects, as well. Subjecting\n> ourselves to the same pain may even give us more incentive to eventually\n> improve rename following for everyone.\n\nI'm uncertain how that should work, and rather sceptical that it would\nwork at all.\n\nSome have expressed that it is a pain to deal with the fallout of this\npatch.  Should we then come up with those envisioned improvements,\nwhatever they might be?  I'm fairly certain that I won't have the time\nfor that.  Or should you do those improvements, because, after all,\nyou thrust upon us this churn?  Then it would certainly be better to\ncome up with those improvements first...\n\nOverall, I remain unconvinced, and maintain that this just trades one\nannoyance for the other, and it's not worth it.\n\n"},{"id":"548681","messageId":"2d455ecf-972e-e3ce-54bc-683050c04282@gmx.de","threadId":"65899","inReplyTo":"alR9GDNTbdjWB4dq@szeder.dev","subject":"Re: [PATCH RFC v3 2/2] Move libgit.a sources into separate \"lib/\" directory","fromName":"Johannes Schindelin","fromEmail":"johannes.schindelin@gmx.de","sentAt":"2026-07-20T14:24:00Z","receivedAt":"2026-07-20T14:24:06Z","isPatch":true,"body":"Hi Gábor,\n\nOn Mon, 13 Jul 2026, SZEDER Gábor wrote:\n\n> On Wed, Jul 01, 2026 at 08:59:27AM +0200, Patrick Steinhardt wrote:\n> > This move does not come for free though:\n> > \n> >   - The mass rename introduces a cutoff point in the history of every\n> >     moved file, as tools like git-log(1) do not follow renames by\n> >     default.\n> > \n> >   - Any in-flight or not-yet-submitted topic that touches the moved\n> >     files will have to be rebased, and backporting fixes across the\n> >     boundary becomes more cumbersome as a patch can no longer apply\n> >     cleanly to both the old and the new layout.\n> > \n> > My own (obviously subjective and biased) take is that the tradeoff is\n> > worth it, as these issues are a one-time cost while the benefits to\n> > discoverability will be permanent.\n> \n> It is not a one-time cost, but will be an ongoing burden.\n\nIt is maybe drawn-out, but it is a one-time cost. It's not like we're\ngoing to mass-rename source files to move them to `lib/` every two weeks\nfrom now on.\n\nAnd this statement neglects to acknowledge that the lack of clean\norganization of source code files is an ongoing burden _right now_, and\nwould be at least partially addressed by the move.\n\n> > Furthermore, especially the first downside is a limitation in Git\n> > itself. We're not the first or last project to do such a mass rename. So\n> > if our provided tools are insufficient, then we should improve them to\n> > make the experience better for other projects, as well. Subjecting\n> > ourselves to the same pain may even give us more incentive to eventually\n> > improve rename following for everyone.\n> \n> I'm uncertain how that should work, and rather sceptical that it would\n> work at all.\n\nI am painfully reminded of all the arguments against migrating certain\nrepositories to Git. They sounded exactly like this.\n\n> Some have expressed that it is a pain to deal with the fallout of this\n> patch.  Should we then come up with those envisioned improvements,\n> whatever they might be?  I'm fairly certain that I won't have the time\n> for that.  Or should you do those improvements, because, after all,\n> you thrust upon us this churn?  Then it would certainly be better to\n> come up with those improvements first...\n> \n> Overall, I remain unconvinced, and maintain that this just trades one\n> annoyance for the other, and it's not worth it.\n\nIn case anyone was waiting for differing opinion, for a vote in favor of a\nbetter structure of Git's source code, and of equipping the Git project\nitself with the all-too-common need for improved support for following\nmass-renames/moves across criss-cross merges, I am happy to provide.\n\nCiao,\nJohannes\n"},{"id":"548695","messageId":"al6Yz_QMlyU1GETv@fruit.crustytoothpaste.net","threadId":"65899","inReplyTo":"20260701-pks-libgit-in-subdir-v3-2-5e4860056094@pks.im","subject":"Re: [PATCH RFC v3 2/2] Move libgit.a sources into separate \"lib/\" directory","fromName":"brian m. carlson","fromEmail":"sandals@crustytoothpaste.net","sentAt":"2026-07-20T21:53:20Z","receivedAt":"2026-07-20T21:53:27Z","isPatch":true,"body":"On 2026-07-01 at 06:59:27, Patrick Steinhardt wrote:\n> This move does not come for free though:\n> \n>   - The mass rename introduces a cutoff point in the history of every\n>     moved file, as tools like git-log(1) do not follow renames by\n>     default.\n> \n>   - Any in-flight or not-yet-submitted topic that touches the moved\n>     files will have to be rebased, and backporting fixes across the\n>     boundary becomes more cumbersome as a patch can no longer apply\n>     cleanly to both the old and the new layout.\n> \n> My own (obviously subjective and biased) take is that the tradeoff is\n> worth it, as these issues are a one-time cost while the benefits to\n> discoverability will be permanent.\n\nI agree this is worth it.  I found it odd even when I started working on\nGit many years back that most of our code was placed directly in the\nrepository root when most other projects put it under a directory.  I\nthink it would be valuable both for existing contributors and for new\nones to tidy this up.\n\n> Furthermore, especially the first downside is a limitation in Git\n> itself. We're not the first or last project to do such a mass rename. So\n> if our provided tools are insufficient, then we should improve them to\n> make the experience better for other projects, as well. Subjecting\n> ourselves to the same pain may even give us more incentive to eventually\n> improve rename following for everyone.\n\nI would very much welcome better rename support and I'm sure the\ncommunity would as well.  If we can incentivize ourselves to step up and\nimplement that, I'm all for it.\n-- \nbrian m. carlson (they/them)\nToronto, Ontario, CA\n"},{"id":"548696","messageId":"xmqqjyqpb96n.fsf@gitster.g","threadId":"65899","inReplyTo":"2d455ecf-972e-e3ce-54bc-683050c04282@gmx.de","subject":"Re: [PATCH RFC v3 2/2] Move libgit.a sources into separate \"lib/\" directory","fromName":"Junio C Hamano","fromEmail":"gitster@pobox.com","sentAt":"2026-07-20T22:14:24Z","receivedAt":"2026-07-20T22:14:27Z","isPatch":true,"body":"Johannes Schindelin <Johannes.Schindelin@gmx.de> writes:\n\n>> > My own (obviously subjective and biased) take is that the tradeoff is\n>> > worth it, as these issues are a one-time cost while the benefits to\n>> > discoverability will be permanent.\n>> \n>> It is not a one-time cost, but will be an ongoing burden.\n>\n> It is maybe drawn-out, but it is a one-time cost. It's not like we're\n> going to mass-rename source files to move them to `lib/` every two weeks\n> from now on.\n\nSince the topic was posted, I have dealt with the fallout from it at\nleast twice a day (which, when we are lucky, is not a huge time\nsink, as I have mostly automated it by now), and again every time a\nnew topic is posted that touches the moved files in substantial ways\nor adds new files that ought to be moved.  The latter is the most\ntime-consuming to handle.  This will continue until all contemporary\ntopics, as well as the topic in question, graduate.\n\nIf that is not an ongoing burden, I do not know what is.\n\n> And this statement neglects to acknowledge that the lack of clean\n> organization of source code files is an ongoing burden _right now_, and\n> would be at least partially addressed by the move.\n\nAt least, Gábor does not seem to think that the lack of clean\norganization is so severe as to warrant a massive code churn like\nthis.\n\nI value stability much more than prettiness.  If we had started out\nwith almost nothing at the root level and almost everything in\neither 'lib' or 'builtin', I would have strongly preferred to keep\nthat structure.  But since we have been using a layout that has all\nbuilt-in commands in 'builtin', with subsystems like 'refs' and\n'odb' in their own directories, and everything else at the root\nlevel, I would prefer to keep that organization until a substantial\nsubsystem update wants to carve out a new location for itself, just\nas past updates to create 'builtin', 'refs', and 'odb' did.\n\nCompared to those past moves, the proposed change looks more like\nchurn for the sake of moving things around, without achieving any\nreal organizational improvement.\n\nI must say that I, too, remain skeptical.\n"},{"id":"548703","messageId":"xmqqqzkx9t95.fsf@gitster.g","threadId":"65899","inReplyTo":"al6Yz_QMlyU1GETv@fruit.crustytoothpaste.net","subject":"Re: [PATCH RFC v3 2/2] Move libgit.a sources into separate \"lib/\" directory","fromName":"Junio C Hamano","fromEmail":"gitster@pobox.com","sentAt":"2026-07-20T22:43:50Z","receivedAt":"2026-07-20T22:43:53Z","isPatch":true,"body":"\"brian m. carlson\" <sandals@crustytoothpaste.net> writes:\n\n> I would very much welcome better rename support and I'm sure the\n> community would as well.  If we can incentivize ourselves to step up and\n> implement that, I'm all for it.\n\nI would welcome such an effort.  It is, however, a different story\nto move things simply because we want to move them, without a\nconcrete need or strategy to do so.\n\nIn any case, the root level of the 'lib/' directory introduced by\nthe 'ps/libgit-in-subdir' topic is full of source files, with only a\nsmall number of focused subdirectories like 'odb/', 'refs/', and\n'ewah/' mixed in to house specific subsystems.  This merely shifts\nthe clutter one level down without resolving it.\n\nI would rather see a structure where each subsystem-like group\ncarves out its own directory.\n\nI do not particularly care whether such a directory lives at the\nroot level or inside 'lib/'.  But if we were to establish a sensible\ngrouping, I suspect we would not need a 'lib/' directory solely to\nhouse the 'refs/' and 'odb/' subdirectories.  Instead, it would be\nsufficiently clean to have 'refs/', 'odb/', and other subsystem\ndirectories directly under the root level.\n\nI do not think we want to do this in a single large change.  If we\nwere to move everything to 'lib/' only to then need to further group\nthem into subdirectories of 'lib/', it would subject us to multiple\nrounds of disruption.  I suspect it would be far less disruptive if\nwe migrated one subsystem at a time, directly to a new directory\nimmediately below the root level.\n"},{"id":"548704","messageId":"al6yCTDjBRn2HGq0@com-79390","threadId":"65899","inReplyTo":"xmqqqzkx9t95.fsf@gitster.g","subject":"Re: [PATCH RFC v3 2/2] Move libgit.a sources into separate \"lib/\" directory","fromName":"Taylor Blau","fromEmail":"ttaylorr@openai.com","sentAt":"2026-07-20T23:40:57Z","receivedAt":"2026-07-20T23:41:03Z","isPatch":true,"body":"On Mon, Jul 20, 2026 at 03:43:50PM -0700, Junio C Hamano wrote:\n> I do not think we want to do this in a single large change.  If we\n> were to move everything to 'lib/' only to then need to further group\n> them into subdirectories of 'lib/', it would subject us to multiple\n> rounds of disruption.  I suspect it would be far less disruptive if\n> we migrated one subsystem at a time, directly to a new directory\n> immediately below the root level.\n\nI agree.\n\nThough it may seem *more* disruptive to do it piecemeal instead of all\nat once, I think it would be preferable to avoid having a single\nsubsystem have to move multiple times.\n\nThat said, I am not sure that I completely understand the motivation\nbehind such a change to begin with. The second patch in this series\nclaims that:\n\n - \"The Git project is not exactly the easiest project to get started in\n   [...]\", because in part:\n\n - \"[..] finding your way around in our project's tree is not easy.\n   Doing a directory listing in the top-level directory will present you\n   with more than 550 files, which makes it extremely hard for a\n   newcomer to figure out what files they are even supposed to look at.\"\n\nI am not sure I understand how moving ~700 some odd files into \"lib\" makes\nthe project easier to navigate. I understand the patch's latter point\nthat:\n\n - \"It is not obvious at all which files are part of \"libgit.a\" and\n   which files are only linked into our final executables.\"\n\nBut don't see how this distinction will help newcomers who are likely\nnot yet thinking about which files are part of libgit.a and which are\nnot.\n\nMy other thought is that I worry that \"lib\" might itself be somewhat\nmisleading, given that many of the files being moved are not especially\namenable in the current form to being linked against as external\nlibraries.\n\nSo, I guess my feeling is that I am not closed off to the idea that the\nbenefits outweigh the risks/drawbacks here, but I currently do not see\nthat they do.\n\nThanks,\nTaylor\n"},{"id":"550281","messageId":"ansSfYBPm6lZc7jB@pks.im","threadId":"65899","inReplyTo":"al6yCTDjBRn2HGq0@com-79390","subject":"Re: [PATCH RFC v3 2/2] Move libgit.a sources into separate \"lib/\" directory","fromName":"Patrick Steinhardt","fromEmail":"ps@pks.im","sentAt":"2026-08-11T12:15:57Z","receivedAt":"2026-08-11T12:16:06Z","isPatch":true,"body":"On Mon, Jul 20, 2026 at 06:40:57PM -0500, Taylor Blau wrote:\n> On Mon, Jul 20, 2026 at 03:43:50PM -0700, Junio C Hamano wrote:\n> > I do not think we want to do this in a single large change.  If we\n> > were to move everything to 'lib/' only to then need to further group\n> > them into subdirectories of 'lib/', it would subject us to multiple\n> > rounds of disruption.  I suspect it would be far less disruptive if\n> > we migrated one subsystem at a time, directly to a new directory\n> > immediately below the root level.\n> \n> I agree.\n> \n> Though it may seem *more* disruptive to do it piecemeal instead of all\n> at once, I think it would be preferable to avoid having a single\n> subsystem have to move multiple times.\n> \n> That said, I am not sure that I completely understand the motivation\n> behind such a change to begin with. The second patch in this series\n> claims that:\n> \n>  - \"The Git project is not exactly the easiest project to get started in\n>    [...]\", because in part:\n> \n>  - \"[..] finding your way around in our project's tree is not easy.\n>    Doing a directory listing in the top-level directory will present you\n>    with more than 550 files, which makes it extremely hard for a\n>    newcomer to figure out what files they are even supposed to look at.\"\n> \n> I am not sure I understand how moving ~700 some odd files into \"lib\" makes\n> the project easier to navigate. I understand the patch's latter point\n> that:\n\nI guess the motivation is still not clear enough then. My maint intent\nisn't really to make individual files in \"lib/\" more discoverable.\nUltimately, I agree with you that they're not really becoming magically\nmore discoverable themselves, except...\n\n>  - \"It is not obvious at all which files are part of \"libgit.a\" and\n>    which files are only linked into our final executables.\"\n\n... that it's becoming clearer which files are part of libgit.a and\nwhich are not. And that to me is already a benefit by itself.\n\nBut what I care about is to make everything else more discoverable. We\nhave a bunch of files and directories in our toplevel that are relevant\nto developers, and especially newcomers will have a hard time to even\ndiscover them when they're looking at 561 files.\n\n> But don't see how this distinction will help newcomers who are likely\n> not yet thinking about which files are part of libgit.a and which are\n> not.\n\nThey're not. But they'll care about there being a README.md,\nSECURITY.md, a conde of conduct, a license, installation instructions,\nbuild systems, and the various subdirectories that we have. All of these\nfiles are currently getting completely drowned out by the noise.\n\n> My other thought is that I worry that \"lib\" might itself be somewhat\n> misleading, given that many of the files being moved are not especially\n> amenable in the current form to being linked against as external\n> libraries.\n\nFair, but they still result in \"libgit.a\".\n\nThanks!\n\nPatrick\n"},{"id":"550282","messageId":"ansSg4qsPwh5FcR9@pks.im","threadId":"65899","inReplyTo":"xmqqjyqpb96n.fsf@gitster.g","subject":"Re: [PATCH RFC v3 2/2] Move libgit.a sources into separate \"lib/\" directory","fromName":"Patrick Steinhardt","fromEmail":"ps@pks.im","sentAt":"2026-08-11T12:16:03Z","receivedAt":"2026-08-11T12:16:10Z","isPatch":true,"body":"On Mon, Jul 20, 2026 at 03:14:24PM -0700, Junio C Hamano wrote:\n> Johannes Schindelin <Johannes.Schindelin@gmx.de> writes:\n> \n> >> > My own (obviously subjective and biased) take is that the tradeoff is\n> >> > worth it, as these issues are a one-time cost while the benefits to\n> >> > discoverability will be permanent.\n> >> \n> >> It is not a one-time cost, but will be an ongoing burden.\n> >\n> > It is maybe drawn-out, but it is a one-time cost. It's not like we're\n> > going to mass-rename source files to move them to `lib/` every two weeks\n> > from now on.\n> \n> Since the topic was posted, I have dealt with the fallout from it at\n> least twice a day (which, when we are lucky, is not a huge time\n> sink, as I have mostly automated it by now), and again every time a\n> new topic is posted that touches the moved files in substantial ways\n> or adds new files that ought to be moved.  The latter is the most\n> time-consuming to handle.  This will continue until all contemporary\n> topics, as well as the topic in question, graduate.\n> \n> If that is not an ongoing burden, I do not know what is.\n\nI guess the argument is rather that it's a burden now, but once it's\nmerged and the dust has settled it's going to become less so.\n\n> > And this statement neglects to acknowledge that the lack of clean\n> > organization of source code files is an ongoing burden _right now_, and\n> > would be at least partially addressed by the move.\n> \n> At least, Gábor does not seem to think that the lack of clean\n> organization is so severe as to warrant a massive code churn like\n> this.\n> \n> I value stability much more than prettiness.  If we had started out\n> with almost nothing at the root level and almost everything in\n> either 'lib' or 'builtin', I would have strongly preferred to keep\n> that structure.  But since we have been using a layout that has all\n> built-in commands in 'builtin', with subsystems like 'refs' and\n> 'odb' in their own directories, and everything else at the root\n> level, I would prefer to keep that organization until a substantial\n> subsystem update wants to carve out a new location for itself, just\n> as past updates to create 'builtin', 'refs', and 'odb' did.\n> \n> Compared to those past moves, the proposed change looks more like\n> churn for the sake of moving things around, without achieving any\n> real organizational improvement.\n> \n> I must say that I, too, remain skeptical.\n\nMy main motivation isn't prettiness though, it's newcomers to the\nproject. Git is not an easy project to get started in, and the root\ncause of that of course isn't our file layout but probably rather that\nGit has been growing organically for 20 years. But the file layout\ndefinitely doesn't help newcomers to find their way around in the\nproduct.\n\nSo I'd say main motivation isn't prettiness, it's discoverability. And\nsure, that's a property that regulars on the mailing list are unlikely\nto care about as they already know their way around the project. But I'm\nsure that folks who are new would appreciate it if they could see at a\nglance what parts the project is made of to help them find the right\nfiles at the right time.\n\nAnyway, as I've said already: I'm totally fine if the result of this\ndiscussion is that we don't want to do it. It is churn, and that churn\nhas of course does have a cost.\n\nThanks!\n\nPatrick\n"},{"id":"550299","messageId":"xmqqpkzo39d2.fsf@gitster.g","threadId":"65899","inReplyTo":"ansSg4qsPwh5FcR9@pks.im","subject":"Re: [PATCH RFC v3 2/2] Move libgit.a sources into separate \"lib/\" directory","fromName":"Junio C Hamano","fromEmail":"gitster@pobox.com","sentAt":"2026-08-11T16:33:29Z","receivedAt":"2026-08-11T16:33:33Z","isPatch":true,"body":"Patrick Steinhardt <ps@pks.im> writes:\n\n>> ... built-in commands in 'builtin', with subsystems like 'refs' and\n>> 'odb' in their own directories, and everything else at the root\n>> level, I would prefer to keep that organization until a substantial\n>> subsystem update wants to carve out a new location for itself, just\n>> as past updates to create 'builtin', 'refs', and 'odb' did.\n>> \n>> Compared to those past moves, the proposed change looks more like\n>> churn for the sake of moving things around, without achieving any\n>> real organizational improvement.\n>> \n>> I must say that I, too, remain skeptical.\n>\n> My main motivation isn't prettiness though, it's newcomers to the\n> project. Git is not an easy project to get started in, and the root\n> cause of that of course isn't our file layout but probably rather that\n> Git has been growing organically for 20 years. But the file layout\n> definitely doesn't help newcomers to find their way around in the\n> product.\n\nWhat I gave as good examples were not motivated by prettiness,\neither.  Moving things around to lib/ as a whole ball of wax without\nfurther classification would mean readers, whether new or old, would\nnot benefit from neatly classified set of files that gives readers a\nconcise and easy to understand rules like \"you can visit builtin to\nlearn about individual command implementations\".  To achieve a layout\nthat makes it easier to find our way around, you'd need to move\nthings again after moving everything into lib/.  Moving to lib/ by\nitself does not add much value, if any.  It certainly does not add\nany discoverability.\n\n"},{"id":"550304","messageId":"antWRHPHHES4a1KT@pks.im","threadId":"65899","inReplyTo":"xmqqpkzo39d2.fsf@gitster.g","subject":"Re: [PATCH RFC v3 2/2] Move libgit.a sources into separate \"lib/\" directory","fromName":"Patrick Steinhardt","fromEmail":"ps@pks.im","sentAt":"2026-08-11T17:05:08Z","receivedAt":"2026-08-11T17:05:16Z","isPatch":true,"body":"On Tue, Aug 11, 2026 at 09:33:29AM -0700, Junio C Hamano wrote:\n> Patrick Steinhardt <ps@pks.im> writes:\n> \n> >> ... built-in commands in 'builtin', with subsystems like 'refs' and\n> >> 'odb' in their own directories, and everything else at the root\n> >> level, I would prefer to keep that organization until a substantial\n> >> subsystem update wants to carve out a new location for itself, just\n> >> as past updates to create 'builtin', 'refs', and 'odb' did.\n> >> \n> >> Compared to those past moves, the proposed change looks more like\n> >> churn for the sake of moving things around, without achieving any\n> >> real organizational improvement.\n> >> \n> >> I must say that I, too, remain skeptical.\n> >\n> > My main motivation isn't prettiness though, it's newcomers to the\n> > project. Git is not an easy project to get started in, and the root\n> > cause of that of course isn't our file layout but probably rather that\n> > Git has been growing organically for 20 years. But the file layout\n> > definitely doesn't help newcomers to find their way around in the\n> > product.\n> \n> What I gave as good examples were not motivated by prettiness,\n> either.  Moving things around to lib/ as a whole ball of wax without\n> further classification would mean readers, whether new or old, would\n> not benefit from neatly classified set of files that gives readers a\n> concise and easy to understand rules like \"you can visit builtin to\n> learn about individual command implementations\".  To achieve a layout\n> that makes it easier to find our way around, you'd need to move\n> things again after moving everything into lib/.  Moving to lib/ by\n> itself does not add much value, if any.  It certainly does not add\n> any discoverability.\n\nI think that a cleaned up root directory is by itself already adding a\nlot of value because it makes the entry points into the Git codebase\nmore explicit. As I said elsewhere, the value is not in making the code\nthat is part of \"lib/\" itself more discoverable. The value is in making\neverything else more discoverable.\n\nUltimately though it's a subjective change, so it's hard to argue about\nthat as I cannot present any hard facts.\n\nThanks!\n\nPatrick\n"},{"id":"550489","messageId":"693a61b6-e762-d864-d25b-348485ec039e@gmx.de","threadId":"65899","inReplyTo":"antWRHPHHES4a1KT@pks.im","subject":"Re: [PATCH RFC v3 2/2] Move libgit.a sources into separate \"lib/\" directory","fromName":"Johannes Schindelin","fromEmail":"johannes.schindelin@gmx.de","sentAt":"2026-08-13T09:34:18Z","receivedAt":"2026-08-13T09:34:28Z","isPatch":true,"body":"Hi Patrick & Junio,\n\nOn Tue, 11 Aug 2026, Patrick Steinhardt wrote:\n\n> On Tue, Aug 11, 2026 at 09:33:29AM -0700, Junio C Hamano wrote:\n> > Patrick Steinhardt <ps@pks.im> writes:\n> > \n> > >> ... built-in commands in 'builtin', with subsystems like 'refs' and\n> > >> 'odb' in their own directories, and everything else at the root\n> > >> level, I would prefer to keep that organization until a substantial\n> > >> subsystem update wants to carve out a new location for itself, just\n> > >> as past updates to create 'builtin', 'refs', and 'odb' did.\n> > >> \n> > >> Compared to those past moves, the proposed change looks more like\n> > >> churn for the sake of moving things around, without achieving any\n> > >> real organizational improvement.\n> > >> \n> > >> I must say that I, too, remain skeptical.\n> > >\n> > > My main motivation isn't prettiness though, it's newcomers to the\n> > > project. Git is not an easy project to get started in, and the root\n> > > cause of that of course isn't our file layout but probably rather that\n> > > Git has been growing organically for 20 years. But the file layout\n> > > definitely doesn't help newcomers to find their way around in the\n> > > product.\n> > \n> > What I gave as good examples were not motivated by prettiness,\n> > either.  Moving things around to lib/ as a whole ball of wax without\n> > further classification would mean readers, whether new or old, would\n> > not benefit from neatly classified set of files that gives readers a\n> > concise and easy to understand rules like \"you can visit builtin to\n> > learn about individual command implementations\".  To achieve a layout\n> > that makes it easier to find our way around, you'd need to move\n> > things again after moving everything into lib/.  Moving to lib/ by\n> > itself does not add much value, if any.  It certainly does not add\n> > any discoverability.\n> \n> I think that a cleaned up root directory is by itself already adding a\n> lot of value\n\nFor what it's worth, the cleaned up root directory was the benefit I\nimmediately spotted, too.\n\nOf course, it would be even nicer if `lib/` was split up further, but\nthen:\n\n1) You've got to start _somewhere_. As we saw with so many things on this\n   list, they never materialized because reviewers asked for too much and\n   weren't happy to get incremental improvements first.\n\n2) Naming is hard. As we saw with _many_ refactorings (I am thinking about\n   the low-level merge stuff as well as the ODB stuff, for example), it is\n   unlikely to get the origanization right the first time. So I'd think\n   that first moving the bulk of the library code to lib/ is a good start,\n   and worth merging, leaving later contributions to chop off further\n   parts into subdirectories of lib/.\n\n3) The continuing maintenance pain that is felt with having to integrate\n   this lib/ movement with other in-flight patch series in `seen` is the\n   _exact same_ pain that many other maintainers (myself included) feel\n   continuously. I think it is a good thing that this gap in Git's\n   functionality is now so clearly visible that next time e.g. something\n   like non-automatic rename detection is discussed, it won't be dismissed\n   so easily.\n\n> because it makes the entry points into the Git codebase more explicit.\n> As I said elsewhere, the value is not in making the code that is part of\n> \"lib/\" itself more discoverable. The value is in making everything else\n> more discoverable.\n\n:+1:\n\nHow many casual readers do you think have discovered the top-level\n`RelNotes` symlink, for example?\n\nCiao,\nJohannes\n\n> \n> Ultimately though it's a subjective change, so it's hard to argue about\n> that as I cannot present any hard facts.\n> \n> Thanks!\n> \n> Patrick\n> \n"},{"id":"550510","messageId":"xmqqqzk2t7sm.fsf@gitster.g","threadId":"65899","inReplyTo":"693a61b6-e762-d864-d25b-348485ec039e@gmx.de","subject":"Re: [PATCH RFC v3 2/2] Move libgit.a sources into separate \"lib/\" directory","fromName":"Junio C Hamano","fromEmail":"gitster@pobox.com","sentAt":"2026-08-13T14:27:21Z","receivedAt":"2026-08-13T14:27:24Z","isPatch":true,"body":"Johannes Schindelin <Johannes.Schindelin@gmx.de> writes:\n\n> Of course, it would be even nicer if `lib/` was split up further, but\n> then:\n>\n> 1) You've got to start _somewhere_. As we saw with so many things on this\n>    list, they never materialized because reviewers asked for too much and\n>    weren't happy to get incremental improvements first.\n\nThat is why moving everything to 'lib/' and thinking about the rest\nlater will not work.  Instead, moving a specific component to a\nspecific subdirectory (not 'lib/') would be a reasonably\nself-contained first step.  Consider 'builtin/' as an example:  it\nis focused, and anyone can easily tell what the criterion is.  If\nit is the top-level cmd_foo() implementation, it goes there;\notherwise, it does not.  Then, you can proceed to the second step,\nand then the third.  Iterate enough times, and the top level will\nbecome thin enough that you can either make your final step a\nno-op and leave the remaining files there, or create one last\ngroup to house the hodgepodge of leftover bits and move them there.\n\n> 2) Naming is hard. As we saw with _many_ refactorings (I am thinking about\n>    the low-level merge stuff as well as the ODB stuff, for example), it is\n>    unlikely to get the origanization right the first time. So I'd think\n>    that first moving the bulk of the library code to lib/ is a good start,\n>    and worth merging, leaving later contributions to chop off further\n>    parts into subdirectories of lib/.\n\nAgain, this is because you are trying to do everything at once.\nInstead, come up with one clear concept, name it well, move the\nrelated files there, and then iterate.\n"},{"id":"550555","messageId":"CAC2QwmKs-TV2f=2BhBNQGtVA4vzciN-Vkh95RkGcVKe=6zwwRQ@mail.gmail.com","threadId":"65899","inReplyTo":"xmqqqzk2t7sm.fsf@gitster.g","subject":"Re: [PATCH RFC v3 2/2] Move libgit.a sources into separate \"lib/\" directory","fromName":"Michael Montalbo","fromEmail":"mmontalbo@gmail.com","sentAt":"2026-08-13T19:04:52Z","receivedAt":"2026-08-13T19:05:06Z","isPatch":true,"body":"On Thu, Aug 13, 2026 at 7:27 AM Junio C Hamano <gitster@pobox.com> wrote:\n>\n> Johannes Schindelin <Johannes.Schindelin@gmx.de> writes:\n>\n> > Of course, it would be even nicer if `lib/` was split up further, but\n> > then:\n> >\n> > 1) You've got to start _somewhere_. As we saw with so many things on this\n> >    list, they never materialized because reviewers asked for too much and\n> >    weren't happy to get incremental improvements first.\n>\n> That is why moving everything to 'lib/' and thinking about the rest\n> later will not work.  Instead, moving a specific component to a\n> specific subdirectory (not 'lib/') would be a reasonably\n> self-contained first step.  Consider 'builtin/' as an example:  it\n> is focused, and anyone can easily tell what the criterion is.  If\n> it is the top-level cmd_foo() implementation, it goes there;\n> otherwise, it does not.  Then, you can proceed to the second step,\n> and then the third.  Iterate enough times, and the top level will\n> become thin enough that you can either make your final step a\n> no-op and leave the remaining files there, or create one last\n> group to house the hodgepodge of leftover bits and move them there.\n>\n> > 2) Naming is hard. As we saw with _many_ refactorings (I am thinking about\n> >    the low-level merge stuff as well as the ODB stuff, for example), it is\n> >    unlikely to get the origanization right the first time. So I'd think\n> >    that first moving the bulk of the library code to lib/ is a good start,\n> >    and worth merging, leaving later contributions to chop off further\n> >    parts into subdirectories of lib/.\n>\n> Again, this is because you are trying to do everything at once.\n> Instead, come up with one clear concept, name it well, move the\n> related files there, and then iterate.\n>\n\nReading the discussion initially, I was inclined to agree with the\n\"move to lib/\" idea. As a newer contributor, I do think the number of\nfiles at the top level are a lot to navigate. Taking a step back to\nroughly frame things, points of tension I see are:\n\n  - the level of granularity for a conceptual grouping.\n  - the level of conceptual cohesiveness before a grouping should be\n    created, including what \"cohesiveness\" even means.\n  - the need to create conceptual groups in a timely, deliberate\n    manner without being too quick to create half-baked ones.\n\nAfter considering these points, I ended up being in favor of coming up\nwith more granular, clear conceptual groupings before creating a\ncoarser, general grouping like \"lib/\". However, I do think this\ngrouping process can happen in a more timely and deliberate way. The\nmain appeal of moving stuff to \"lib/\" is to make progress on an effort\nthat otherwise has no concrete roadmap and allows us to \"not let\nperfect be the enemy of good.\"\n\nThere are already conceptual grouping efforts, both ongoing and past,\nthat might provide useful signals for how to make further progress.\nA good set of signals would:\n\n  - correctly reflect the conceptual groups that were already created\n    successfully.\n  - indicate candidate group areas as well as areas not \"settled.\"\n  - be generated by an ongoing, mechanical process that encodes\n    the project's conceptual grouping standards.\n\nI'm not necessarily sure if generating such a set is feasible or a\nwell-formed plan, but I wanted to provide a motivating example to\ncriticize.\n\nOne mechanical signal is how tightly a set of files shares the same\ninternal headers: if two .c files include many of the same project\nheaders (dropping the plumbing everything includes), they lean on the\nsame machinery. Averaged over every pair in the group, that gives one\ncohesion number.\n\nThe already-carved directories have the following scores: refs/ scores\n3.1, trace2/ 1.2, odb/ 1.0, while the whole root is 0.3. The scores\nalso seem predictive: run at the end of 2020, before odb/ existed, the\nobject-database files then at the root already scored 1.2, as cohesive\nas trace2/ or negotiator/ were and 6x the root. odb/ is being carved\nout of those exact files now.\n\nPointing forward, merging today's root .c files by that measure until\ncohesion drops below the carved band proposes these groups, with no\nhand-picked list [1]:\n\n  6.9  connect.c fetch-pack.c remote-curl.c send-pack.c transport.c\n       upload-pack.c\n  6.8  diff-lib.c entry.c read-cache.c unpack-trees.c\n  6.6  commit.c log-tree.c ref-filter.c revision.c sequencer.c\n  6.3  diff.c diffcore-rename.c merge-ort.c\n  6.0  delta-islands.c pack-bitmap-write.c pack-bitmap.c\ncarved directories, for reference:\n  3.1  refs/\n  1.0  odb/\n  1.0  trace2/\n\nEvery proposed group is more cohesive than any directory already\ncarved: the same measure that would have flagged odb/ in 2020 points\nnow at a wire, index, revision, diff, and pack group.\n\nI'm not sure these results necessarily provide the best signal, but\nI believe it would be possible to mine a signal from Git's history /\nexisting project structure that would provide a principled roadmap\nfor deliberately grouping concepts.\n\n[1] the (Claude generated) script:\n\nimport subprocess, re\nfrom collections import defaultdict\nfrom itertools import combinations\n\n# shared distinctive #includes for every .c file; \"distinctive\" = not\n# plumbing, i.e. included by <=12% of the root .c files\npat = r'^[[:space:]]*#[[:space:]]*include[[:space:]]+\"[^\"]+\"'\nout = subprocess.check_output(\n    [\"git\", \"grep\", \"-E\", pat, \"--\", \"*.c\"], text=True)\nq = re.compile(r'\"([^\"]+)\"')\ninc = defaultdict(set)\nfor line in out.splitlines():\n    path, rest = line.split(\":\", 1)\n    m = q.search(rest)\n    if m:\n        h = m.group(1).split(\"/\")[-1]\n        inc[path].add(h[:-2] if h.endswith(\".h\") else h)\nroot = [f for f in inc if \"/\" not in f]\ndocs = defaultdict(int)\nfor f in root:\n    for h in inc[f]: docs[h] += 1\ndist = {h for h, d in docs.items() if d <= len(root) * 0.12}\nfor f in inc: inc[f] &= dist\nfiles = sorted(f for f in root if inc[f])\n\ndef sim(a, b): return len(inc[a] & inc[b])\ndef coh(m):\n    ps = list(combinations(m, 2))\n    return sum(sim(a, b) for a, b in ps) / len(ps) if ps else 0.0\n\n# average-linkage agglomeration of the root files until the best merge's\n# linkage drops below T; link[i][j] holds the summed pair similarity\nT = 5.0\nmem = {i: [f] for i, f in enumerate(files)}\nsize = {i: 1 for i in mem}\nlink = defaultdict(dict)\nfor a, b in combinations(range(len(files)), 2):\n    s = sim(files[a], files[b])\n    if s: link[a][b] = s; link[b][a] = s\nact = set(mem); nid = len(files)\nwhile True:\n    best, bv = None, T\n    for i in act:\n        for j, ss in link[i].items():\n            if i < j and ss / (size[i] * size[j]) >= bv:\n                bv, best = ss / (size[i] * size[j]), (i, j)\n    if not best: break\n    i, j = best; c = nid; nid += 1\n    mem[c] = mem[i] + mem[j]; size[c] = size[i] + size[j]\n    for x in (set(link[i]) | set(link[j])) - {i, j}:\n        s = link[i].get(x, 0) + link[j].get(x, 0)\n        link[c][x] = s; link[x][c] = s\n    for x in list(link[i]): link[x].pop(i, None)\n    for x in list(link[j]): link[x].pop(j, None)\n    link.pop(i, None); link.pop(j, None)\n    act.discard(i); act.discard(j); act.add(c)\n\ngroups = sorted((mem[c] for c in act if size[c] >= 3),\n                key=lambda m: -coh(m))\nprint(\"candidate subsystems (ranked by cohesion):\")\nfor m in groups:\n    print(f\"  {coh(m):.1f}  {' '.join(sorted(m))}\")\ntree = subprocess.check_output(\n    [\"git\", \"ls-files\", \"--\", \"*.c\"], text=True).split()\nprint(\"carved directories, for reference:\")\nfor d in [\"refs\", \"reftable\", \"odb\", \"trace2\"]:\n    c = coh([f for f in tree if f.startswith(d + \"/\")])\n    if c: print(f\"  {c:.1f}  {d}/\")\n"},{"id":"550588","messageId":"CAC2QwmKSrDN1s9a1dR3q165+6LxSrVksY+KWn284ehYrthZ98A@mail.gmail.com","threadId":"65899","inReplyTo":"CAC2QwmKs-TV2f=2BhBNQGtVA4vzciN-Vkh95RkGcVKe=6zwwRQ@mail.gmail.com","subject":"Re: [PATCH RFC v3 2/2] Move libgit.a sources into separate \"lib/\" directory","fromName":"Michael Montalbo","fromEmail":"mmontalbo@gmail.com","sentAt":"2026-08-14T05:01:21Z","receivedAt":"2026-08-14T05:01:35Z","isPatch":true,"body":"On Thu, Aug 13, 2026 at 12:04 PM Michael Montalbo <mmontalbo@gmail.com> wrote:\n>\n> One mechanical signal is how tightly a set of files shares the same\n> internal headers: if two .c files include many of the same project\n> headers (dropping the plumbing everything includes), they lean on the\n> same machinery. Averaged over every pair in the group, that gives one\n> cohesion number.\n>\n\nI spent some time trying to think about a stronger approach. I think the\nfollowing script[2] is a more promising approach to criticize:\n\n- Read the Makefile. Collect the C files that it compiles into the git\n  library. The count is 231.\n- Read every non-merge commit in the history, up to HEAD. For each\n  one, take its area name (the subject prefix, such as \"diff:\" or\n  \"refs:\") and the library files it changed.\n- Give each commit a weight of one divided by the number of library\n  files it changed. A commit that changed two files counts more than a\n  commit that changed forty.\n- For each file, take the area name with the largest total weight. If\n  that weight is small, the file has no area name.\n- Read a 14-line table that groups area names into directories. Put\n  each file into the directory for its area name, or, if it has none,\n  the directory for its filename. A file that matches no directory\n  stays ungrouped.\n- Build a call graph with cscope, a cross-reference database that\n  records which file uses functions defined in another file[1]. This is\n  based on the code, not on file or commit names, so it is a second\n  check independent of the first.\n- Print each directory with its files, then the ungrouped files. Last,\n  compare the call groups with the directories and show the groups\n  that fall across more than one directory. Those mark the boundary\n  files to check.\n\nThe 14-entry table that maps area names to directories is the\nCHARTER block in the script below. Its output:\n\ngit library source files by directory  (HEAD c0c95f3229; 231 files)\n\nodb/   21 files  (21 by commit label)\n   blob commit fsck hash loose match-trees object object-file\n   object-file-convert object-name odb oid-array oidmap oidset oidtree\n   replace-object sha1dc_git tag tmp-objdir tree tree-walk\n\nrefs/   8 files  (7 by commit label)\n   ls-refs pack-refs ref-filter reflog reflog-walk refs refspec\n   worktree\n\npack/   27 files  (18 by commit label)\n   bloom chunk-format commit-graph delta-islands diff-delta midx\n   midx-write pack-bitmap pack-bitmap-write pack-check pack-mtimes\n   pack-objects pack-revindex pack-write packfile packfile-list\n   patch-delta prune-packed pseudo-merge reachable repack repack-cruft\n   repack-filtered repack-geometry repack-midx repack-promisor\n   server-info\n\ndiff/   16 files  (14 by commit label)\n   combine-diff diff diff-lib diff-merges diff-no-index diffcore-break\n   diffcore-delta diffcore-order diffcore-pickaxe diffcore-rename\n   diffcore-rotate patch-ids range-diff tree-diff userdiff\n   xdiff-interface\n\nmerge/   7 files  (7 by commit label)\n   fmt-merge-msg merge merge-blobs merge-ll merge-ort\n   merge-ort-wrappers rerere\n\nrevision/   14 files  (12 by commit label)\n   bisect blame commit-reach decorate graph line-log line-range\n   list-objects list-objects-filter list-objects-filter-options\n   log-tree pretty revision shallow\n\nindex/   19 files  (18 by commit label)\n   cache-tree checkout dir entry fsmonitor fsmonitor-ipc\n   fsmonitor-settings name-hash parallel-checkout pathspec\n   preload-index read-cache resolve-undo sparse-index split-index\n   statinfo symlinks unpack-trees wt-status\n\nsetup/   9 files  (9 by commit label)\n   alias config environment hook ident repo-settings repository setup\n   version\n\nconvert/   3 files  (3 by commit label)\n   attr convert ws\n\ntransport/   19 files  (17 by commit label)\n   bundle bundle-uri connect connected fetch-negotiator\n   fetch-object-info fetch-pack pkt-line promisor-remote protocol\n   protocol-caps remote send-pack serve sideband transport\n   transport-helper upload-pack walker\n\nnotes/   4 files  (3 by commit label)\n   notes notes-cache notes-merge notes-utils\n\nsubmodule/   2 files  (2 by commit label)\n   submodule submodule-config\n\narchive/   3 files  (3 by commit label)\n   archive archive-tar archive-zip\n\nsequencer/   11 files  (11 by commit label)\n   add-interactive add-patch apply branch mailinfo mailmap rebase\n   rebase-interactive replay reset sequencer\n\nplaced 163 files in 14 directories: 145 by commit label,\n12 by filename, 6 by override. The table is 14 lines.\n\n68 files match no subsystem and are left ungrouped:\n   abspath advice alloc base85 cbtree chdir-notify color column\n   common-exit common-init copy credential csum-file ctype date\n   diagnose dir-iterator editor exec-cmd gettext git-zlib\n   gpg-interface grep hash-lookup hashmap help hex hex-ll json-writer\n   kwset levenshtein linear-assignment lockfile mem-pool pager parse\n   parse-options parse-options-cb path path-walk prio-queue progress\n   prompt quote run-command sigchain stable-qsort strbuf string-list\n   strmap strvec sub-process tempfile thread-utils trace trace2\n   trailer unix-socket unix-stream-server url urlmatch usage utf8\n   varint versioncmp wildmatch wrapper write-or-die\n\n[1] Detail: the call-graph check and the label-vs-filename comparison:\n\nSecond check. The call graph records which file uses functions from\nanother file, so it does not use names. Group the files that call each\nother, then compare each group with the directories above. 57 files\nfall into 12 call groups. The 12 sort into three kinds:\n  5 groups: all placed files land in one directory (call graph agrees).\n  6 groups: most files in one directory, plus one or two\n     from another (the boundary cases to check).\n  1 group: shared helpers that many files call (not shown).\n\nBoundary groups, largest directory first. Each line is one\ndirectory and its files in the group. Example: shallow is in\nrevision, but the call graph groups it with the transport files.\n\n  transport (5): connect fetch-pack pkt-line send-pack upload-pack\n  revision (1): shallow\n\n  transport (3): remote transport transport-helper\n  refs (1): refspec\n\n  odb (2): hash object-file\n  pack (1): pack-write\n\n  pack (2): chunk-format commit-graph\n  revision (2): commit-reach revision\n  odb (1): commit\n\n  sequencer (2): add-interactive add-patch\n  index (1): wt-status\n\n  setup (2): config setup\n  refs (1): worktree\n\nCommit label vs filename: both point to the same directory for 151 files\nand disagree for 0 (the 8 overrides are separate). The commit\nlabel and the filename follow the same naming rule, so the label\nconfirms the naming, not the grouping. Only the call graph is an\nindependent check.\n\n[2] The script:\n\n#!/usr/bin/env python3\n\"\"\"subsystems.py: group git's libgit.a source files into directories.\n\nSteps:\n  membership : the Makefile lists the library source files (LIB_OBJS).\n  label      : each file's directory is the area name used most often\n               in its commit messages, weighted toward small commits.\n  table      : 14 lines say which area names share a directory.\n  check      : the call graph is a second, independent signal; it\n               lists the files where the two signals disagree.\n\nRun from a git.git checkout (uses HEAD).\n\"\"\"\nimport re\nimport os\nimport shutil\nimport tempfile\nimport subprocess\nimport math\nimport textwrap\nfrom collections import defaultdict, Counter\n\nTOP = subprocess.check_output(\n    [\"git\", \"rev-parse\", \"--show-toplevel\"], text=True).strip()\nHEAD = subprocess.check_output(\n    [\"git\", \"-C\", TOP, \"rev-parse\", \"--short\", \"HEAD\"],\n    text=True).strip()\n\n\ndef git(*a):\n    return subprocess.run([\"git\", \"-C\", TOP, *a],\n                          capture_output=True, text=True).stdout\n\n\n# membership: exactly what libgit.a archives (authoritative)\nLIB = set()\nfor line in open(TOP + \"/Makefile\"):\n    m = re.match(r\"LIB_OBJS \\+= ([\\w-]+)\\.o$\", line.strip())\n    if m and \"/\" not in m.group(1):\n        LIB.add(m.group(1) + \".c\")\n\n# charter: the only hand input, which fine areas share a directory\nCHARTER = {\n    \"odb\": \"object odb oid oidmap oidset oidtree loose blob tag \"\n           \"commit tree replace match tmp fsck hash sha1dc\",\n    \"refs\": \"refs refspec reflog ref ls worktree\",\n    \"pack\": \"pack packfile midx delta prune reachable server bloom \"\n            \"chunk pseudo repack\",\n    \"diff\": \"diff diffcore combine range userdiff xdiff patch pickaxe\",\n    \"merge\": \"merge rerere fmt\",\n    \"revision\": \"revision log bisect shallow blame line graph \"\n                \"decorate list pretty\",\n    \"index\": \"read cache split sparse unpack name preload resolve \"\n             \"statinfo entry parallel dir pathspec checkout symlinks \"\n             \"fsmonitor wt\",\n    \"setup\": \"config setup environment repository repo ident alias \"\n             \"version hook\",\n    \"convert\": \"attr convert ws whitespace\",\n    \"transport\": \"transport remote connect connected send fetch \"\n                 \"upload walker http protocol serve pkt sideband \"\n                 \"bundle promisor\",\n    \"notes\": \"notes\", \"submodule\": \"submodule\", \"archive\": \"archive\",\n    \"sequencer\": \"sequencer rebase replay apply add reset branch \"\n                 \"mailinfo mailmap\",\n}\nOWNER = {t: s for s, toks in CHARTER.items() for t in toks.split()}\n# per-file exceptions where the name or label points at the wrong dir\nOVERRIDE = {\"pack-refs.c\": \"refs\", \"commit-graph.c\": \"pack\",\n            \"commit-reach.c\": \"revision\", \"tree-diff.c\": \"diff\",\n            \"diff-delta.c\": \"pack\", \"patch-delta.c\": \"pack\",\n            \"dir-iterator.c\": \"lib\", \"hash-lookup.c\": \"lib\"}\n\n\ndef to_dir(token):\n    return OWNER.get(token)\n\n\n# signal A: focus-weighted modal commit \"area:\" label\n# No noise list. A sweep label such as treewide or global appears only\n# on commits that change many files. Small commit weight keeps those\n# commits low, so a sweep label is never a file's top label; 0 seen.\nPRE = re.compile(r\"^([A-Za-z0-9][\\w./-]*):\")\n\n\ndef norm(p):\n    p = p.lower()\n    return p[:-2] if p.endswith((\".c\", \".h\")) else p\n\n\n# One pass over the log. A commit touching k libgit.a files adds 1/k to\n# each file's tally for that commit's area label, so a 2-file commit is\n# stronger evidence than a 40-file sweep. (History before a rename is\n# under the old name; a --follow pass is a known refinement.)\ncommits = []\nlab, files = None, []\nlog = git(\"log\", \"--no-merges\", \"--name-only\", \"--format=%x00%s\")\nfor line in log.split(\"\\n\"):\n    if line.startswith(\"\\x00\"):\n        if lab and files:\n            commits.append((lab, files))\n        m = PRE.match(line[1:])\n        lab = norm(m.group(1)) if m else None\n        files = []\n    elif line.endswith(\".c\") and \"/\" not in line and line in LIB:\n        files.append(line)\nif lab and files:\n    commits.append((lab, files))\n\nwt = defaultdict(lambda: defaultdict(float))\nfor lab, files in commits:\n    w = 1.0 / len(files)\n    for f in set(files):\n        wt[f][lab] += w\n\n\ndef modal(f):\n    \"\"\"The top focus-weighted label, or None if history is thin.\"\"\"\n    c = wt.get(f)\n    if not c:\n        return None\n    l, w = max(c.items(), key=lambda kv: (kv[1], kv[0]))  # tie: name\n    tot = sum(c.values())\n    if tot < 2.0 or w / tot < 0.34:   # <2 commits, or under 34%\n        return None\n    return l\n\n\ndef place(f):\n    \"\"\"(dir, how) for a file, or (None, ...) if it joins no subsystem.\n    Precedence: override, commit label, filename.\"\"\"\n    if f in OVERRIDE:\n        d = OVERRIDE[f]\n        return (None if d == \"lib\" else d), \"override\"\n    lab = modal(f)\n    if lab:\n        d = to_dir(lab.split(\"/\")[0].split(\"-\")[0])\n        if d:\n            return d, \"label\"\n    d = to_dir(f[:-2].split(\"-\")[0])     # fallback: filename token\n    if d:\n        return d, \"name\"\n    return None, \"ungrouped\"\n\n\n# signal B: the call graph. cscope, a cross-reference database, gives\n# the call edges, so calls in comments, strings, and macros are not\n# counted. The coding style gives the definitions: a column-0 line that\n# names a function defines it; it is exported if it lacks \"static\".\nCTRL = {\"if\", \"for\", \"while\", \"switch\", \"return\", \"sizeof\", \"do\",\n        \"else\", \"case\", \"typedef\", \"struct\", \"union\", \"enum\", \"extern\",\n        \"static\"}\ntext = {f: open(TOP + \"/\" + f, encoding=\"utf-8\",\n                errors=\"replace\").read() for f in LIB}\n\n\ndef scan_defs(t):\n    \"\"\"(exported, all) function names a file defines at column 0.\"\"\"\n    exported, everything = set(), set()\n    for ln in t.split(\"\\n\"):\n        if not ln or ln[0] in \" \\t#}/*{)\":\n            continue\n        if (\"(\" not in ln or ln.rstrip().endswith(\";\")\n                or \"=\" in ln.split(\"(\")[0]):\n            continue\n        m = re.match(r\"^(static\\b)?.*?([A-Za-z_]\\w*)\\s*\\(\", ln)\n        if not m or m.group(2) in CTRL:\n            continue\n        everything.add(m.group(2))\n        if not m.group(1):\n            exported.add(m.group(2))\n    return exported, everything\n\n\nowner_fn, dup, allnames = {}, set(), set()\nfor f in LIB:\n    exported, everything = scan_defs(text[f])\n    allnames |= everything\n    for name in exported:\n        if name in owner_fn:\n            dup.add(name)\n        owner_fn[name] = f\nfor name in dup:\n    owner_fn.pop(name, None)\n\n\ndef cscope_calls():\n    \"\"\"calls[a][b] = call sites in root .c file a that call a non-static\n    function defined in root .c file b, using cscope. cscope type 2\n    lists, per queried function, the functions it calls, one line per\n    call site as 'caller_file callee_name line text'. The caller file\n    and callee name are on each line, so no bookkeeping is needed.\"\"\"\n    if not shutil.which(\"cscope\"):\n        raise SystemExit(\"cscope not found on PATH; run under \"\n                         \"'nix-shell -p cscope'.\")\n    tmp = tempfile.mkdtemp(prefix=\"subsys-cs-\")\n    try:\n        flist = os.path.join(tmp, \"files\")\n        out = os.path.join(tmp, \"cscope.out\")\n        with open(flist, \"w\") as fh:\n            fh.write(\"\\n\".join(sorted(LIB)) + \"\\n\")\n        subprocess.run(\n            [\"cscope\", \"-b\", \"-q\", \"-k\", \"-i\", flist, \"-f\", out],\n            cwd=TOP, check=True, stdout=subprocess.DEVNULL,\n            stderr=subprocess.DEVNULL)\n        query = \"\".join(f\"2{n}\\n\" for n in sorted(allnames))\n        res = subprocess.run(\n            [\"cscope\", \"-d\", \"-l\", \"-f\", out], cwd=TOP, input=query,\n            capture_output=True, text=True).stdout\n    finally:\n        shutil.rmtree(tmp, ignore_errors=True)\n    calls = defaultdict(lambda: defaultdict(int))\n    for line in res.split(\"\\n\"):\n        if not line or line.startswith(\">>\"):   # blank or prompt line\n            continue\n        parts = line.split(\" \", 3)   # caller_file callee line text\n        if len(parts) < 4 or not parts[2].isdigit():\n            continue   # marker or malformed line\n        caller, callee = parts[0], parts[1]\n        cf = owner_fn.get(callee)\n        if caller in LIB and cf and cf != caller:\n            calls[caller][cf] += 1\n    return calls\n\n\ncalls = cscope_calls()\nfanin = defaultdict(set)\nfor a in calls:\n    for b in calls[a]:\n        fanin[b].add(a)\nN = len(LIB)\nidf = {b: math.log(N / len(s)) for b, s in fanin.items()}\naff = defaultdict(dict)\nfor a in calls:\n    for b in calls[a]:\n        w = (calls[a].get(b, 0) * idf.get(b, 0)\n             + calls.get(b, {}).get(a, 0) * idf.get(a, 0))\n        if w > 0:\n            aff[a][b] = aff[b][a] = w\nidx = {f: i for i, f in enumerate(sorted(LIB))}\nmem = {i: [f] for f, i in idx.items()}\nsize = {i: 1 for i in mem}\nlink = defaultdict(dict)\nfor a in aff:\n    for b, w in aff[a].items():\n        if idx[a] < idx[b]:\n            link[idx[a]][idx[b]] = link[idx[b]][idx[a]] = w\nact, nid = set(mem), len(LIB)\nwhile True:\n    best, bv = None, 15.0\n    for i in act:\n        for j, w in link[i].items():\n            if i < j and w / (size[i] * size[j]) >= bv:\n                bv, best = w / (size[i] * size[j]), (i, j)\n    if not best:\n        break\n    i, j = best\n    c = nid\n    nid += 1\n    mem[c], size[c] = mem[i] + mem[j], size[i] + size[j]\n    for x in (set(link[i]) | set(link[j])) - {i, j}:\n        link[c][x] = link[x][c] = link[i].get(x, 0) + link[j].get(x, 0)\n    for x in list(link[i]):\n        link[x].pop(i, None)\n    for x in list(link[j]):\n        link[x].pop(j, None)\n    link.pop(i, None)\n    link.pop(j, None)\n    act.discard(i)\n    act.discard(j)\n    act.add(c)\nclusters = [mem[c] for c in act if size[c] >= 3]\n\n# report\npl = {f: place(f) for f in sorted(LIB)}\nby_dir = defaultdict(list)\nfor f, (d, _how) in pl.items():\n    by_dir[d].append(f)\n\n\ndef wrapped(names):\n    return textwrap.wrap(\" \".join(sorted(n[:-2] for n in names)), 70,\n                         initial_indent=\"   \", subsequent_indent=\"   \",\n                         break_long_words=False, break_on_hyphens=False)\n\n\nmod = git(\"status\", \"--porcelain\", \"--\",\n          \"*.c\", \"*.h\", \"Makefile\").strip()\ndirty = \" plus local changes\" if mod else \"\"\nprint(f\"git library source files by directory  \"\n      f\"(HEAD {HEAD}{dirty}; {len(LIB)} files)\\n\")\nfor d in list(CHARTER):\n    fs = by_dir.get(d, [])\n    if not fs:\n        continue\n    lab_n = sum(1 for f in fs if pl[f][1] == \"label\")\n    print(f\"{d}/   {len(fs)} files  ({lab_n} by commit label)\")\n    for w in wrapped(fs):\n        print(w)\n    print()\n\nung = by_dir.get(None, [])\nplaced = len(LIB) - len(ung)\nhow = Counter(pl[f][1] for f in LIB if pl[f][0] is not None)\nprint(f\"placed {placed} files in {len(CHARTER)} directories: \"\n      f\"{how['label']} by commit label,\\n{how['name']} by filename, \"\n      f\"{how['override']} by override. The table is 14 lines.\")\nprint(f\"\\n{len(ung)} files match no subsystem and are left ungrouped:\")\nfor w in wrapped(ung):\n    print(w)\n\n# Second check with the call graph. It records which file uses\n# functions from which other file, so it does not use names and is\n# independent of the labels. Group files that call each other, then\n# compare each group with the directories. Leave ungrouped helpers out.\nagree = loose = 0\nboundary = []\nfor c in clusters:\n    by = defaultdict(list)\n    for f in c:\n        if pl[f][0]:\n            by[pl[f][0]].append(f[:-2])\n    dirs = sorted(by, key=lambda d: (-len(by[d]), d))\n    if len(dirs) <= 1:\n        agree += 1\n    elif len(by[dirs[0]]) >= 2:\n        boundary.append((dirs, by))\n    else:\n        loose += 1\nboundary.sort(key=lambda x: (-len(x[1][x[0][0]]), x[0][0]))\ncovered = sum(len(c) for c in clusters)\n\n\ndef plural(n):\n    return \"group\" if n == 1 else \"groups\"\n\n\nprint(\"\\nSecond check. The call graph records which file uses \"\n      \"functions from\")\nprint(\"another file, so it does not use names. Group the files that \"\n      \"call each\")\nprint(f\"other, then compare each group with the directories above. \"\n      f\"{covered} files\\nfall into {len(clusters)} call groups. The \"\n      f\"{len(clusters)} sort into three kinds:\")\nprint(f\"  {agree} {plural(agree)}: all placed files land in one \"\n      \"directory (call graph agrees).\")\nprint(f\"  {len(boundary)} {plural(len(boundary))}: most files in one \"\n      \"directory, plus one or two\\n     from another (the boundary \"\n      \"cases to check).\")\nprint(f\"  {loose} {plural(loose)}: shared helpers that many files call \"\n      \"(not shown).\")\nif boundary:\n    print(\"\\nBoundary groups, largest directory first. Each line \"\n          \"is one\")\n    print(\"directory and its files in the group. Example: shallow \"\n          \"is in\")\n    print(\"revision, but the call graph groups it with the transport \"\n          \"files.\")\n    for dirs, by in boundary:\n        print()\n        for d in dirs:\n            label = f\"  {d} ({len(by[d])}): \"\n            for w in textwrap.wrap(\" \".join(sorted(by[d])), 70,\n                                   initial_indent=label,\n                                   subsequent_indent=\" \" * len(label),\n                                   break_long_words=False,\n                                   break_on_hyphens=False):\n                print(w)\n\n# Label vs filename: the honest circularity check.\nsame, diff = 0, []\nfor f in sorted(LIB):\n    lab = modal(f)\n    if not lab:\n        continue\n    dl = to_dir(lab.split(\"/\")[0].split(\"-\")[0])\n    dn = to_dir(f[:-2].split(\"-\")[0])\n    if dl and dn:\n        if dl == dn:\n            same += 1\n        elif f not in OVERRIDE:\n            diff.append((f, dl, dn, lab))\nprint(f\"\\nCommit label vs filename: both point to the same directory \"\n      f\"for {same} files\\nand disagree for {len(diff)} (the \"\n      f\"{len(OVERRIDE)} overrides are separate). The commit\\nlabel and \"\n      \"the filename follow the same naming rule, so the \"\n      \"label\\nconfirms the naming, not the grouping. Only the call \"\n      \"graph is an\\nindependent check.\")\nfor f, dl, dn, lab in diff:\n    print(f\"  {f[:-2]:20} label->{dl:10} name->{dn:10} ('{lab}:')\")\n"},{"id":"550723","messageId":"xmqq7blo4g7g.fsf@gitster.g","threadId":"65899","inReplyTo":"CAC2QwmKs-TV2f=2BhBNQGtVA4vzciN-Vkh95RkGcVKe=6zwwRQ@mail.gmail.com","subject":"Re: [PATCH RFC v3 2/2] Move libgit.a sources into separate \"lib/\" directory","fromName":"Junio C Hamano","fromEmail":"gitster@pobox.com","sentAt":"2026-08-17T20:58:27Z","receivedAt":"2026-08-17T20:58:30Z","isPatch":true,"body":"Michael Montalbo <mmontalbo@gmail.com> writes:\n\n> Pointing forward, merging today's root .c files by that measure until\n> cohesion drops below the carved band proposes these groups, with no\n> hand-picked list [1]:\n>\n>   6.9  connect.c fetch-pack.c remote-curl.c send-pack.c transport.c\n>        upload-pack.c\n>   6.8  diff-lib.c entry.c read-cache.c unpack-trees.c\n>   6.6  commit.c log-tree.c ref-filter.c revision.c sequencer.c\n>   6.3  diff.c diffcore-rename.c merge-ort.c\n>   6.0  delta-islands.c pack-bitmap-write.c pack-bitmap.c\n\nWe need to be careful about situations where a source file has to\ninclude a header file only because a definition of one thing it uses\nhappens to be included in an otherwise out-of-place header file, and\nmoving such an out-of-place definition to a different header file\nmay affect mechanical groupings.  But with that caveat out of the\nway, it is good when mechanical groupings match intuition.\n\nAnd the earliest one in the list above actually does.  They form the\n\"transport\" group.\n\nThe other groups in the list may not be so clear-cut, but this is an\ninteresting thought experiment that yielded a good, concrete result.\nAnd as I said, we do not need to wait until we fully classify the\nremainder.  When a conceptually clean group is identified, just as\nwhen we created 'builtin/', 'refs/', or 'odb/', we can carve out a\nnew directory for it, and we will have moved one step closer to a\nbetter place.\n\nOne tangential question is whether we can separate bisect and\nrevision machinery in such a way that bisect stands on its own,\nwithout stronger ties to the revision machinery than other users,\nsuch as 'rev-list' and 'log'.  \"git rev-list --bisect\" was a\nhistorical accident that happened only because, back when \"git\nbisect\" was a shell script, there was no good place to put the\nlogic, not because it was the best place for it.\n\nThanks.\n"}]}