git/list[1] front-page[2] threads[3] people[4] search[5] about
 

[RFC PATCH 000/194] Moving global state into the repository object

From
Stefan Beller <sbeller@google.com>
Date
Feb 5, 2018, 23:51 UTC
Message-ID
<20180205235508.216277-1-sbeller@google.com>

This series moves a lot of global state into the repository struct. It applies on top of 2512f15446149235156528dafbe75930c712b29e (2.16.0) It can be found at https://github.com/stefanbeller/git/tree/object-store

Motivation for this series:
* Easier to reason about code when all state is stored in one place,
  for example for multithreading
* Easier to move to processing submodules in-process instead of
  calling a processes for the submodule handling.
  The last patch demonstrates this.

Usually when approaching large refactoring series, a lot of tedious review work is involved and yet it is hard to be convinced the series did everything right.

When reviewing this series in particular it is hard to be convinced if any function that is converted to take the repository as an argument is fully converted or if there are any hidden dependencies that are not obvious from code review.

This is why this series tries to be reviewer friendly by utilizing machine assistance as much as possible. There are 3 types of patches in this series:

(A) <area>: add repository argument to <function_foo>
  This sort of patch is just adding the repository as an argument to that
  function. It assumes the given repository is `the_repository` and has
  a compile time check for that assertion using a preprocessor trick.
  As did a compile check after each commit of the series, I don't expect
  the review burden on these patches to be high. Review on these patches
  is mostly checking for formatting errors or if I sneak in malicious
  code -- if you're inclined to believe that.
(B) <area>: allow <function_foo> to handle arbitrary repositories
  This sort of patch is touching code inside the given function only,
  usually replacing all occurrences of `the_repository` by the argument
  `r`. Here the review is critical: Did I miss any function that relies
  on state of `the_repository` ?
  This series was developed by converting all functions of
  packfile/sha1-file/commit/etc using (A); after the demo patch
  was possible, all patches that did (A), but not (B) were deleted.
  Therefore I was confident at time of writing that patch that
  the conversion of a function which doesn't take a repository argument
  is okay.
(C) other patches, such as moving code around,
    demoing this series in the last patch

This approach was chosen as I think it is review friendly, despite the huge number of patches.

A weakness of this approach is the buildup of a large series, which ignores the ongoing development. Rebasing that series turned out to be ok, but merging it with confidence is an issue.

This series was developed partially as a pair programming exercise with Jonathan Nieder and Brandon Williams.

The idea with the #define trick to separate the two very separate issues of touching a lot of code and reasoning about its correctness (hidden deps) is mostly from Jonathan Tan.

Any suggestions welcome!

Thanks, Stefan

Brandon Williams (4):
  sha1_file: allow add_to_alternates_file to handle arbitrary
    repositories
  commit: convert commit_graft_pos() to handle arbitrary repositories
  commit: convert register_commit_graft to handle arbitrary repositories
  commit: convert read_graft_file to handle arbitrary repositories
Jonathan Nieder (50):
  object-store: move packed_git and packed_git_mru to object store
  pack: move prepare_packed_git_run_once to object store
  pack: move approximate object count to object store
  pack: add repository argument to install_packed_git
  pack: add repository argument to prepare_packed_git_one
  pack: add repository argument to rearrange_packed_git
  pack: add repository argument to prepare_packed_git_mru
  pack: add repository argument to prepare_packed_git
  pack: add repository argument to reprepare_packed_git
  pack: add repository argument to sha1_file_name
  pack: add repository argument to map_sha1_file
  sha1_file: allow alt_odb_usable to handle arbitrary repositories
  pack: allow install_packed_git to handle arbitrary repositories
  pack: allow rearrange_packed_git to handle arbitrary repositories
  pack: allow prepare_packed_git_mru to handle arbitrary repositories
  pack: allow prepare_packed_git_one to handle arbitrary repositories
  pack: allow prepare_packed_git to handle arbitrary repositories
  pack: allow reprepare_packed_git to handle arbitrary repositories
  pack: allow sha1_file_name to handle arbitrary repositories
  pack: allow stat_sha1_file to handle arbitrary repositories
  pack: allow open_sha1_file to handle arbitrary repositories
  pack: allow map_sha1_file_1 to handle arbitrary repositories
  pack: allow map_sha1_file to handle arbitrary repositories
  pack: allow sha1_loose_object_info to handle arbitrary repositories
  sha1_file: add repository argument to sha1_object_info_extended
  object-store: move alternates API to new alternates.h
  object-store: move loose object functions to new loose-object.h
  pack: move struct pack_window and pack_entry to packfile.h
  object-store: move replace_objects back to object-store
  object-store: move lookup_replace_object to replace-object.h
  pack: add repository argument to packed_object_info
  pack: add repository argument to find_pack_entry
  object: add repository argument to lookup_object
  object: add repository argument to grow_object_hash
  object: add repository argument to lookup_commit_reference_gently
  object: add repository argument to lookup_commit
  object: move grafts to object parser
  object: add repository argument to commit_graft_pos
  object: add repository argument to register_commit_graft
  object: add repository argument to read_graft_file
  object: add repository argument to prepare_commit_graft
  object: add repository argument to lookup_commit_graft
  object: add repository argument to lookup_unknown_object
  Rename sha1_object_info.cocci to object_store.cocci
  alternates: add repository argument to add_to_alternates_memory
  object-store: move check_sha1_signature to object-store.h
  object-store: add repository argument to check_sha1_signature
  object-store: add repository argument to read_object
  object-store: add repository argument to read_sha1_file_extended
  object: move read_object_with_reference to object.h
Stefan Beller (140):
  repository: introduce object store field
  object-store: move alt_odb_list and alt_odb_tail to object store
  sha1_file: add repository argument to alt_odb_usable
  sha1_file: add repository argument to link_alt_odb_entry
  sha1_file: add repository argument to read_info_alternates
  sha1_file: add repository argument to link_alt_odb_entries
  sha1_file: add repository argument to stat_sha1_file
  sha1_file: add repository argument to open_sha1_file
  sha1_file: add repository argument to map_sha1_file_1
  sha1_file: add repository argument to sha1_loose_object_info
  object-store: add repository argument to prepare_alt_odb
  object-store: add repository argument to foreach_alt_odb
  object-store: allow prepare_alt_odb to handle arbitrary repositories
  object-store: allow foreach_alt_odb to handle arbitrary repositories
  replace_object.c: rename to use dash in file name
  replace-object: move replace_object to object store
  object-store: move object access functions to object-store.h
  replace-object: add repository argument to do_lookup_replace_object
  replace-object: move replace objects prepared flag to object store
  replace-object: check_replace_refs is safe in multi repo environment
  refs: add repository argument to for_each_replace_ref
  refs: add repository argument to get_main_ref_store
  replace-object: add repository argument to register_replace_object
  replace-object: add repository argument to register_replace_ref
  replace-object: add repository argument to replace_object_pos
  replace-object: allow replace_object_pos to handle arbitrary
    repositories
  replace-object: allow register_replace_object to handle arbitrary
    repositories
  replace-object: add repository argument to prepare_replace_object
  refs: store the main ref store inside the repository struct
  refs: allow for_each_replace_ref to handle arbitrary repositories
  replace-object: allow prepare_replace_object to handle arbitrary
    repositories
  replace_object: allow do_lookup_replace_object to handle arbitrary
    repositories
  replace-object: add repository argument to lookup_replace_object
  repository: allow lookup_replace_object to handle arbitrary
    repositories
  object-store: add repository argument to sha1_object_info
  pack: add repository argument to retry_bad_packed_offset
  pack: add repository argument to packed_to_object_type
  packfile: add repository argument to read_object
  packfile: add repository argument to unpack_entry
  packfile: add repository argument to cache_or_unpack_entry
  pack: allow find_pack_entry to handle arbitrary repositories
  object-store: allow sha1_object_info to handle arbitrary repositories
  fetch, push: do not use submodule as alternate in has_commits check
  push: add test showing bad interaction of replace refs and submodules
  replace_object: allow register_replace_ref to handle arbitrary
    repositories
  cache.h: migrate the definition of object_id to object.h
  repository: introduce object parser field
  object: add repository argument to parse_object
  object: add repository argument to create_object
  blob: add repository argument to lookup_blob
  tree: add repository argument to lookup_tree
  tag: add repository argument to lookup_tag
  tag: add repository argument to parse_tag_buffer
  tag: add repository argument to deref_tag
  object: add repository argument to lookup_commit_reference
  commit: add repository argument to parse_commit_buffer
  object: allow grow_object_hash to handle arbitrary repositories
  object: allow create_object to handle arbitrary repositories
  object: allow lookup_object to handle arbitrary repositories
  object: allow lookup_unknown_object to handle arbitrary repositories
  object: add repository argument to parse_object_buffer
  repository: keep track of all open repositories
  alternates: add repository argument to add_to_alternates_file
  object-store: add repository argument to read_sha1_file
  packfile: add repository argument to has_packed_and_bad
  packfile: allow has_packed_and_bad to handle arbitrary repositories
  streaming: add repository argument to open_istream_fn
  streaming: add repository argument to open_istream
  streaming: add repository argument to istream_source
  streaming: allow istream_source to handle arbitrary repositories
  sha1_file: allow read_object to handle arbitrary repositories
  object-store.h: allow read_sha1_file{_extended} to handle arbitrary
    repositories
  streaming: allow open_istream_incore to handle arbitrary repositories
  streaming: allow open_istream_pack_non_delta to handle arbitrary
    repositories
  streaming: allow open_istream_loose to handle arbitrary repositories
  streaming: allow open_istream to handle arbitrary repositories
  alternates: convert add_to_alternates_memory to handle arbitrary repos
  object: add repository argument to object_as_type
  alloc: add repository argument to alloc_blob_node
  alloc: add repository argument to alloc_tree_node
  alloc: add repository argument to alloc_commit_node
  alloc: add repository argument to alloc_tag_node
  alloc: add repository argument to alloc_object_node
  alloc: add repository argument to alloc_report
  alloc: add repository argument to alloc_commit_index
  alloc: allow arbitrary repositories for alloc functions
  object: allow object_as_type to handle arbitrary repositories
  commit: allow lookup_commit to handle arbitrary repositories
  object: add repository argument to parse_commit_gently
  commit: add repository argument to parse_commit
  commit: add repository argument to set_commit_buffer
  commit: add repository argument to get_cached_commit_buffer
  commit: add repository argument to unuse_commit_buffer
  commit: add repository argument to free_commit_buffer
  commit: allow commit buffer functions to handle arbitrary repositories
  tree: allow lookup_tree to handle arbitrary repositories
  cache: convert get_graft_file to handle arbitrary repositories
  shallow: add repository argument to set_alternate_shallow_file
  shallow: add repository argument to register_shallow
  shallow: add repository argument to check_shallow_file_for_update
  shallow: add repository argument to is_repository_shallow
  migrate cached path to use the_repository
  shallow: migrate shallow information into the object parser
  commit: allow prepare_commit_graft to handle arbitrary repositories
  commit: allow lookup_commit_graft to handle arbitrary repositories
  commit: allow arbitrary repository argument for parse_commit_buffer
  commit: allow parse_commit_gently to handle arbitrary repository
  commit: add repository argument to get_merge_bases_many_0
  commit: add repository argument to merge_bases_many
  commit: add repository argument to paint_down_to_common
  commit: allow parse_commit to handle arbitrary repositories
  commit: allow paint_down_to_common to handle arbitrary repositories
  commit: allow merge_bases_many to handle arbitrary repositories
  commit: add repository argument to remove_redundant
  commit: allow remove_redundant to handle arbitrary repositories
  commit: allow get_merge_bases_many_0 to handle arbitrary repositories
  commit: add repository argument to get_merge_bases
  commit: allow get_merge_bases to handle arbitrary repositories
  blob: allow lookup_blob to handle arbitrary repositories
  tag: allow lookup_tag to handle arbitrary repositories
  tag: allow parse_tag_buffer to handle arbitrary repositories
  object: allow parse_object_buffer to handle arbitrary repositories
  objects: allow check_sha1_signature to handle arbitrary repositories
  object: allow parse_object to handle arbitrary repositories
  tag: allow deref_tag to handle arbitrary repositories
  commit: allow lookup_commit_reference_gently to handle arbitrary
    repositories
  commit: allow lookup_commit_reference to handle arbitrary repositories
  commit: add repository argument to get_commit_buffer
  commit: add repository argument to logmsg_reencode
  pretty: add repository argument to format_commit_message
  commit: allow get_commit_buffer to handle arbitrary repositories
  pretty: allow logmsg_reencode to handle arbitrary repositories
  commit: add repository argument to in_merge_bases_many
  commit: add repository argument to in_merge_bases
  commit: allow in_merge_bases_many to handle arbitrary repositories
  commit: allow in_merge_bases to handle arbitrary repositories
  pretty: allow format_commit_message to handle arbitrary repositories
  submodule: add repository argument to print_submodule_summary
  submodule: Reorder open_submodule function
  submodule: use submodule repos for object lookup
 Makefile                                   |   2 +-
 alloc.c                                    |  48 +++--
 alternates.h                               |  68 +++++++
 apply.c                                    |   8 +-
 archive-tar.c                              |   6 +-
 archive-zip.c                              |   8 +-
 archive.c                                  |   9 +-
 bisect.c                                   |   6 +-
 blame.c                                    |  40 ++--
 blob.c                                     |  10 +-
 blob.h                                     |   2 +-
 branch.c                                   |  16 +-
 builtin/am.c                               |  14 +-
 builtin/blame.c                            |   9 +-
 builtin/branch.c                           |  11 +-
 builtin/cat-file.c                         |  28 ++-
 builtin/checkout.c                         |  12 +-
 builtin/clone.c                            |  14 +-
 builtin/commit-tree.c                      |   5 +-
 builtin/commit.c                           |  63 +++---
 builtin/count-objects.c                    |  12 +-
 builtin/describe.c                         |  19 +-
 builtin/diff-tree.c                        |   9 +-
 builtin/diff.c                             |   7 +-
 builtin/difftool.c                         |   5 +-
 builtin/fast-export.c                      |  30 +--
 builtin/fetch.c                            |  21 +-
 builtin/fmt-merge-msg.c                    |  19 +-
 builtin/fsck.c                             |  44 ++--
 builtin/gc.c                               |   8 +-
 builtin/grep.c                             |  10 +-
 builtin/hash-object.c                      |   1 +
 builtin/index-pack.c                       |  26 ++-
 builtin/log.c                              |  26 ++-
 builtin/ls-files.c                         |   2 +-
 builtin/ls-tree.c                          |   4 +-
 builtin/merge-base.c                       |  11 +-
 builtin/merge-tree.c                       |  12 +-
 builtin/merge.c                            |  41 ++--
 builtin/mktag.c                            |  10 +-
 builtin/mktree.c                           |   4 +-
 builtin/name-rev.c                         |  15 +-
 builtin/notes.c                            |  16 +-
 builtin/pack-objects.c                     |  66 +++---
 builtin/pack-redundant.c                   |   8 +-
 builtin/pack-refs.c                        |   3 +-
 builtin/prune-packed.c                     |   1 +
 builtin/prune.c                            |   8 +-
 builtin/pull.c                             |  19 +-
 builtin/receive-pack.c                     |  14 +-
 builtin/reflog.c                           |  21 +-
 builtin/remote.c                           |   1 +
 builtin/replace.c                          |  24 ++-
 builtin/reset.c                            |  11 +-
 builtin/rev-list.c                         |   7 +-
 builtin/rev-parse.c                        |  11 +-
 builtin/shortlog.c                         |   5 +-
 builtin/show-branch.c                      |   9 +-
 builtin/show-ref.c                         |   1 +
 builtin/submodule--helper.c                |   5 +-
 builtin/tag.c                              |  12 +-
 builtin/unpack-file.c                      |   4 +-
 builtin/unpack-objects.c                   |  15 +-
 builtin/verify-commit.c                    |   7 +-
 bulk-checkin.c                             |   3 +-
 bundle.c                                   |   9 +-
 cache-tree.c                               |   4 +-
 cache.h                                    | 315 ++---------------------------
 combine-diff.c                             |   5 +-
 commit.c                                   | 241 ++++++++++++----------
 commit.h                                   |  49 +++--
 config.c                                   |   2 +-
 contrib/coccinelle/cached_path.cocci       |  44 ++++
 contrib/coccinelle/object_parser.cocci     | 125 ++++++++++++
 contrib/coccinelle/object_store.cocci      |  74 +++++++
 contrib/coccinelle/packed_git.cocci        |  15 ++
 contrib/coccinelle/submodule_reading.cocci |  34 ++++
 convert.c                                  |   1 +
 diff.c                                     |   8 +-
 diffcore-rename.c                          |   1 +
 dir.c                                      |   4 +-
 entry.c                                    |   5 +-
 environment.c                              |  10 +-
 fast-import.c                              |  45 +++--
 fetch-pack.c                               |  47 +++--
 fsck.c                                     |  20 +-
 git.c                                      |   2 +-
 grep.c                                     |   5 +-
 http-backend.c                             |  12 +-
 http-push.c                                |  24 ++-
 http-walker.c                              |   5 +-
 http.c                                     |  10 +-
 line-log.c                                 |   2 +-
 list-objects-filter.c                      |   2 +-
 list-objects.c                             |   4 +-
 log-tree.c                                 |  18 +-
 loose-object.h                             |  91 +++++++++
 mailmap.c                                  |   4 +-
 match-trees.c                              |   6 +-
 merge-blobs.c                              |   8 +-
 merge-recursive.c                          |  30 +--
 mru.h                                      |   1 +
 notes-cache.c                              |   9 +-
 notes-merge.c                              |  15 +-
 notes-utils.c                              |   6 +-
 notes.c                                    |  12 +-
 object-store.h                             | 183 +++++++++++++++++
 object.c                                   | 106 +++++-----
 object.h                                   |  82 +++++++-
 pack-bitmap-write.c                        |   7 +-
 pack-bitmap.c                              |   6 +-
 pack-check.c                               |   6 +-
 pack-revindex.c                            |   1 +
 pack.h                                     |   1 +
 packfile.c                                 | 149 ++++++++------
 packfile.h                                 |  41 +++-
 parse-options-cb.c                         |   2 +-
 path.c                                     |  18 +-
 path.h                                     |  40 +++-
 pretty.c                                   |  24 ++-
 pretty.h                                   |   2 +-
 reachable.c                                |  12 +-
 read-cache.c                               |   7 +-
 ref-filter.c                               |  15 +-
 reflog-walk.c                              |   3 +-
 refs.c                                     |  87 ++++----
 refs.h                                     |   4 +-
 refs/files-backend.c                       |   2 +-
 remote-testsvn.c                           |   6 +-
 remote.c                                   |  27 ++-
 replace_object.c => replace-object.c       |  70 +++----
 replace-object.h                           |  34 ++++
 repository.c                               |  84 ++++++--
 repository.h                               |  33 ++-
 rerere.c                                   |  12 +-
 revision.c                                 |  48 ++---
 send-pack.c                                |   7 +-
 sequencer.c                                |  93 +++++----
 server-info.c                              |  12 +-
 sha1_file.c                                | 236 +++++++++++----------
 sha1_name.c                                |  75 ++++---
 shallow.c                                  | 113 ++++++-----
 streaming.c                                |  33 +--
 streaming.h                                |   2 +-
 submodule-config.c                         |   3 +-
 submodule.c                                | 100 +++++----
 t/helper/test-example-decorate.c           |   6 +-
 t/helper/test-ref-store.c                  |   6 +-
 t/helper/test-revision-walking.c           |   2 +-
 t/t5531-deep-submodule-push.sh             |  16 ++
 tag.c                                      |  36 ++--
 tag.h                                      |   7 +-
 tmp-objdir.c                               |   4 +-
 transport.c                                |   5 +-
 tree-walk.c                                |   5 +-
 tree.c                                     |  24 ++-
 tree.h                                     |   2 +-
 upload-pack.c                              |  25 ++-
 walker.c                                   |  17 +-
 wt-status.c                                |  10 +-
 xdiff-interface.c                          |   4 +-
 161 files changed, 2669 insertions(+), 1596 deletions(-)
 create mode 100644 alternates.h
 create mode 100644 contrib/coccinelle/cached_path.cocci
 create mode 100644 contrib/coccinelle/object_parser.cocci
 create mode 100644 contrib/coccinelle/object_store.cocci
 create mode 100644 contrib/coccinelle/packed_git.cocci
 create mode 100644 contrib/coccinelle/submodule_reading.cocci
 create mode 100644 loose-object.h
 create mode 100644 object-store.h
 rename replace_object.c => replace-object.c (55%)
 create mode 100644 replace-object.h
-- 
2.15.1.433.g936d1b9894.dirty
Next: Stefan Beller
Message 1 of 239 in “Moving global state into the repository object”
  1. 000/194 Moving global state into the repository objectStefan Beller, Feb 5, 2018
  2. 001/194 repository: introduce object store fieldStefan Beller, Feb 5, 2018
  3. 002/194 object-store: move alt_odb_list and alt_odb_tail to object storeStefan Beller, Feb 5, 2018
  4. 003/194 object-store: move packed_git and packed_git_mru to object storeStefan Beller, Feb 5, 2018
  5. Junio C HamanoFeb 9, 2018
  6. Stefan BellerFeb 12, 2018
  7. Junio C HamanoFeb 12, 2018
  8. René ScharfeFeb 12, 2018
  9. Junio C HamanoFeb 12, 2018
  10. René ScharfeFeb 13, 2018
  11. Stefan BellerFeb 13, 2018
  12. Junio C HamanoFeb 14, 2018
  13. René ScharfeFeb 12, 2018
  14. 005/194 pack: move approximate object count to object storeStefan Beller, Feb 5, 2018
  15. 004/194 pack: move prepare_packed_git_run_once to object storeStefan Beller, Feb 5, 2018
  16. 006/194 sha1_file: add repository argument to alt_odb_usableStefan Beller, Feb 5, 2018
  17. 007/194 sha1_file: add repository argument to link_alt_odb_entryStefan Beller, Feb 5, 2018
  18. 008/194 sha1_file: add repository argument to read_info_alternatesStefan Beller, Feb 5, 2018
  19. 009/194 sha1_file: add repository argument to link_alt_odb_entriesStefan Beller, Feb 5, 2018
  20. 010/194 sha1_file: add repository argument to stat_sha1_fileStefan Beller, Feb 5, 2018
  21. 012/194 sha1_file: add repository argument to map_sha1_file_1Stefan Beller, Feb 5, 2018
  22. 013/194 sha1_file: add repository argument to sha1_loose_object_infoStefan Beller, Feb 5, 2018
  23. 011/194 sha1_file: add repository argument to open_sha1_fileStefan Beller, Feb 5, 2018
  24. 014/194 object-store: add repository argument to prepare_alt_odbStefan Beller, Feb 5, 2018
  25. 015/194 object-store: add repository argument to foreach_alt_odbStefan Beller, Feb 5, 2018
  26. 016/194 pack: add repository argument to install_packed_gitStefan Beller, Feb 5, 2018
  27. 018/194 pack: add repository argument to rearrange_packed_gitStefan Beller, Feb 5, 2018
  28. 017/194 pack: add repository argument to prepare_packed_git_oneStefan Beller, Feb 5, 2018
  29. 019/194 pack: add repository argument to prepare_packed_git_mruStefan Beller, Feb 5, 2018
  30. 020/194 pack: add repository argument to prepare_packed_gitStefan Beller, Feb 5, 2018
  31. 021/194 pack: add repository argument to reprepare_packed_gitStefan Beller, Feb 5, 2018
  32. 021/194 pack: add repository argument to reprepare_packed_gitStefan Beller, Feb 5, 2018
  33. 022/194 pack: add repository argument to sha1_file_nameStefan Beller, Feb 5, 2018
  34. 024/194 sha1_file: allow alt_odb_usable to handle arbitrary repositoriesStefan Beller, Feb 5, 2018
  35. 025/194 object-store: allow prepare_alt_odb to handle arbitrary repositoriesStefan Beller, Feb 5, 2018
  36. brian m. carlsonFeb 6, 2018
  37. Derrick StoleeFeb 6, 2018
  38. Stefan BellerFeb 6, 2018
  39. brian m. carlsonFeb 8, 2018
  40. Jonathan TanFeb 7, 2018
  41. 026/194 object-store: allow foreach_alt_odb to handle arbitrary repositoriesStefan Beller, Feb 5, 2018
  42. 028/194 pack: allow rearrange_packed_git to handle arbitrary repositoriesStefan Beller, Feb 5, 2018
  43. 023/194 pack: add repository argument to map_sha1_fileStefan Beller, Feb 5, 2018
  44. 027/194 pack: allow install_packed_git to handle arbitrary repositoriesStefan Beller, Feb 5, 2018
  45. 029/194 pack: allow prepare_packed_git_mru to handle arbitrary repositoriesStefan Beller, Feb 5, 2018
  46. 030/194 pack: allow prepare_packed_git_one to handle arbitrary repositoriesStefan Beller, Feb 5, 2018
  47. 031/194 pack: allow prepare_packed_git to handle arbitrary repositoriesStefan Beller, Feb 5, 2018
  48. 032/194 pack: allow reprepare_packed_git to handle arbitrary repositoriesStefan Beller, Feb 5, 2018
  49. 033/194 pack: allow sha1_file_name to handle arbitrary repositoriesStefan Beller, Feb 5, 2018
  50. 034/194 pack: allow stat_sha1_file to handle arbitrary repositoriesStefan Beller, Feb 5, 2018
  51. 035/194 pack: allow open_sha1_file to handle arbitrary repositoriesStefan Beller, Feb 5, 2018
  52. 036/194 pack: allow map_sha1_file_1 to handle arbitrary repositoriesStefan Beller, Feb 5, 2018
  53. 037/194 pack: allow map_sha1_file to handle arbitrary repositoriesStefan Beller, Feb 5, 2018
  54. 038/194 pack: allow sha1_loose_object_info to handle arbitrary repositoriesStefan Beller, Feb 5, 2018
  55. Jonathan TanFeb 7, 2018
  56. Stefan BellerFeb 7, 2018
  57. 039/194 replace_object.c: rename to use dash in file nameStefan Beller, Feb 5, 2018
  58. 040/194 replace-object: move replace_object to object storeStefan Beller, Feb 5, 2018
  59. 041/194 sha1_file: add repository argument to sha1_object_info_extendedStefan Beller, Feb 5, 2018
  60. 042/194 object-store: move alternates API to new alternates.hStefan Beller, Feb 5, 2018
  61. brian m. carlsonFeb 6, 2018
  62. Stefan BellerFeb 6, 2018
  63. Junio C HamanoFeb 9, 2018
  64. Eric SunshineFeb 6, 2018
  65. Stefan BellerFeb 6, 2018
  66. 043/194 object-store: move loose object functions to new loose-object.hStefan Beller, Feb 5, 2018
  67. 044/194 pack: move struct pack_window and pack_entry to packfile.hStefan Beller, Feb 5, 2018
  68. 045/194 object-store: move object access functions to object-store.hStefan Beller, Feb 5, 2018
  69. 047/194 object-store: move lookup_replace_object to replace-object.hStefan Beller, Feb 5, 2018
  70. 046/194 object-store: move replace_objects back to object-storeStefan Beller, Feb 5, 2018
  71. Junio C HamanoFeb 9, 2018
  72. Stefan BellerFeb 12, 2018
  73. 048/194 replace-object: add repository argument to do_lookup_replace_objectStefan Beller, Feb 5, 2018
  74. 049/194 replace-object: move replace objects prepared flag to object storeStefan Beller, Feb 5, 2018
  75. 050/194 replace-object: check_replace_refs is safe in multi repo environmentStefan Beller, Feb 5, 2018
  76. Eric SunshineFeb 6, 2018
  77. 051/194 refs: add repository argument to for_each_replace_refStefan Beller, Feb 5, 2018
  78. 052/194 refs: add repository argument to get_main_ref_storeStefan Beller, Feb 5, 2018
  79. 053/194 replace-object: add repository argument to register_replace_objectStefan Beller, Feb 5, 2018
  80. 054/194 replace-object: add repository argument to register_replace_refStefan Beller, Feb 5, 2018
  81. 055/194 replace-object: add repository argument to replace_object_posStefan Beller, Feb 5, 2018
  82. 056/194 replace-object: allow replace_object_pos to handle arbitrary repositoriesStefan Beller, Feb 5, 2018
  83. 057/194 replace-object: allow register_replace_object to handle arbitrary repositoriesStefan Beller, Feb 5, 2018
  84. 058/194 replace-object: add repository argument to prepare_replace_objectStefan Beller, Feb 5, 2018
  85. 059/194 refs: store the main ref store inside the repository structStefan Beller, Feb 5, 2018
  86. Eric SunshineFeb 6, 2018
  87. Stefan BellerFeb 6, 2018
  88. 060/194 refs: allow for_each_replace_ref to handle arbitrary repositoriesStefan Beller, Feb 5, 2018
  89. 061/194 replace-object: allow prepare_replace_object to handle arbitrary repositoriesStefan Beller, Feb 5, 2018
  90. 063/194 replace-object: add repository argument to lookup_replace_objectStefan Beller, Feb 5, 2018
  91. 062/194 replace_object: allow do_lookup_replace_object to handle arbitrary repositoriesStefan Beller, Feb 5, 2018
  92. 064/194 repository: allow lookup_replace_object to handle arbitrary repositoriesStefan Beller, Feb 5, 2018
  93. 065/194 object-store: add repository argument to sha1_object_infoStefan Beller, Feb 5, 2018
  94. brian m. carlsonFeb 6, 2018
  95. 066/194 pack: add repository argument to retry_bad_packed_offsetStefan Beller, Feb 5, 2018
  96. 067/194 pack: add repository argument to packed_to_object_typeStefan Beller, Feb 5, 2018
  97. 068/194 pack: add repository argument to packed_object_infoStefan Beller, Feb 5, 2018
  98. 069/194 pack: add repository argument to find_pack_entryStefan Beller, Feb 5, 2018
  99. 070/194 packfile: add repository argument to read_objectStefan Beller, Feb 5, 2018
  100. 071/194 packfile: add repository argument to unpack_entryStefan Beller, Feb 5, 2018
  101. 072/194 packfile: add repository argument to cache_or_unpack_entryStefan Beller, Feb 5, 2018
  102. 073/194 pack: allow find_pack_entry to handle arbitrary repositoriesStefan Beller, Feb 5, 2018
  103. 074/194 object-store: allow sha1_object_info to handle arbitrary repositoriesStefan Beller, Feb 5, 2018
  104. 075/194 fetch, push: do not use submodule as alternate in has_commits checkStefan Beller, Feb 5, 2018
  105. Eric SunshineFeb 6, 2018
  106. Stefan BellerFeb 6, 2018
  107. 076/194 push: add test showing bad interaction of replace refs and submodulesStefan Beller, Feb 5, 2018
  108. brian m. carlsonFeb 6, 2018
  109. Stefan BellerFeb 6, 2018
  110. 077/194 replace_object: allow register_replace_ref to handle arbitrary repositoriesStefan Beller, Feb 5, 2018
  111. 078/194 cache.h: migrate the definition of object_id to object.hStefan Beller, Feb 5, 2018
  112. 079/194 repository: introduce object parser fieldStefan Beller, Feb 5, 2018
  113. 080/194 object: add repository argument to parse_objectStefan Beller, Feb 5, 2018
  114. 081/194 object: add repository argument to create_objectStefan Beller, Feb 5, 2018
  115. 082/194 object: add repository argument to lookup_objectStefan Beller, Feb 5, 2018
  116. 083/194 object: add repository argument to grow_object_hashStefan Beller, Feb 5, 2018
  117. 084/194 blob: add repository argument to lookup_blobStefan Beller, Feb 5, 2018
  118. 085/194 tree: add repository argument to lookup_treeStefan Beller, Feb 5, 2018
  119. 086/194 tag: add repository argument to lookup_tagStefan Beller, Feb 5, 2018
  120. 087/194 tag: add repository argument to parse_tag_bufferStefan Beller, Feb 5, 2018
  121. 088/194 tag: add repository argument to deref_tagStefan Beller, Feb 5, 2018
  122. 089/194 object: add repository argument to lookup_commit_reference_gentlyStefan Beller, Feb 5, 2018
  123. 090/194 object: add repository argument to lookup_commit_referenceStefan Beller, Feb 5, 2018
  124. 091/194 object: add repository argument to lookup_commitStefan Beller, Feb 5, 2018
  125. 092/194 object: move grafts to object parserStefan Beller, Feb 5, 2018
  126. Eric SunshineFeb 6, 2018
  127. Stefan BellerFeb 6, 2018
  128. 093/194 object: add repository argument to commit_graft_posStefan Beller, Feb 5, 2018
  129. 094/194 commit: add repository argument to parse_commit_bufferStefan Beller, Feb 5, 2018
  130. 095/194 object: add repository argument to register_commit_graftStefan Beller, Feb 5, 2018
  131. 096/194 object: add repository argument to read_graft_fileStefan Beller, Feb 5, 2018
  132. 097/194 object: add repository argument to prepare_commit_graftStefan Beller, Feb 5, 2018
  133. 098/194 object: add repository argument to lookup_commit_graftStefan Beller, Feb 5, 2018
  134. 099/194 object: allow grow_object_hash to handle arbitrary repositoriesStefan Beller, Feb 6, 2018
  135. 100/194 object: allow create_object to handle arbitrary repositoriesStefan Beller, Feb 6, 2018
  136. 101/194 object: allow lookup_object to handle arbitrary repositoriesStefan Beller, Feb 6, 2018
  137. 102/194 object: add repository argument to lookup_unknown_objectStefan Beller, Feb 6, 2018
  138. 103/194 object: allow lookup_unknown_object to handle arbitrary repositoriesStefan Beller, Feb 6, 2018
  139. 104/194 object: add repository argument to parse_object_bufferStefan Beller, Feb 6, 2018
  140. 105/194 repository: keep track of all open repositoriesStefan Beller, Feb 6, 2018
  141. 106/194 Rename sha1_object_info.cocci to object_store.cocciStefan Beller, Feb 6, 2018
  142. 107/194 alternates: add repository argument to add_to_alternates_fileStefan Beller, Feb 6, 2018
  143. 108/194 alternates: add repository argument to add_to_alternates_memoryStefan Beller, Feb 6, 2018
  144. 109/194 object-store: move check_sha1_signature to object-store.hStefan Beller, Feb 6, 2018
  145. 110/194 object-store: add repository argument to check_sha1_signatureStefan Beller, Feb 6, 2018
  146. 111/194 object-store: add repository argument to read_objectStefan Beller, Feb 6, 2018
  147. 112/194 object-store: add repository argument to read_sha1_file_extendedStefan Beller, Feb 6, 2018
  148. 113/194 object-store: add repository argument to read_sha1_fileStefan Beller, Feb 6, 2018
  149. 114/194 object: move read_object_with_reference to object.hStefan Beller, Feb 6, 2018
  150. 115/194 packfile: add repository argument to has_packed_and_badStefan Beller, Feb 6, 2018
  151. 116/194 packfile: allow has_packed_and_bad to handle arbitrary repositoriesStefan Beller, Feb 6, 2018
  152. 117/194 streaming: add repository argument to open_istream_fnStefan Beller, Feb 6, 2018
  153. 119/194 streaming: add repository argument to istream_sourceStefan Beller, Feb 6, 2018
  154. 120/194 streaming: allow istream_source to handle arbitrary repositoriesStefan Beller, Feb 6, 2018
  155. 121/194 sha1_file: allow read_object to handle arbitrary repositoriesStefan Beller, Feb 6, 2018
  156. 122/194 object-store.h: allow read_sha1_file{_extended} to handle arbitrary repositoriesStefan Beller, Feb 6, 2018
  157. 123/194 streaming: allow open_istream_incore to handle arbitrary repositoriesStefan Beller, Feb 6, 2018
  158. 124/194 streaming: allow open_istream_pack_non_delta to handle arbitrary repositoriesStefan Beller, Feb 6, 2018
  159. 125/194 streaming: allow open_istream_loose to handle arbitrary repositoriesStefan Beller, Feb 6, 2018
  160. 126/194 streaming: allow open_istream to handle arbitrary repositoriesStefan Beller, Feb 6, 2018
  161. 127/194 alternates: convert add_to_alternates_memory to handle arbitrary reposStefan Beller, Feb 6, 2018
  162. 128/194 object: add repository argument to object_as_typeStefan Beller, Feb 6, 2018
  163. 129/194 alloc: add repository argument to alloc_blob_nodeStefan Beller, Feb 6, 2018
  164. 130/194 alloc: add repository argument to alloc_tree_nodeStefan Beller, Feb 6, 2018
  165. 131/194 alloc: add repository argument to alloc_commit_nodeStefan Beller, Feb 6, 2018
  166. 132/194 alloc: add repository argument to alloc_tag_nodeStefan Beller, Feb 6, 2018
  167. 133/194 alloc: add repository argument to alloc_object_nodeStefan Beller, Feb 6, 2018
  168. 134/194 alloc: add repository argument to alloc_reportStefan Beller, Feb 6, 2018
  169. 135/194 alloc: add repository argument to alloc_commit_indexStefan Beller, Feb 6, 2018
  170. 136/194 alloc: allow arbitrary repositories for alloc functionsStefan Beller, Feb 6, 2018
  171. Eric SunshineFeb 6, 2018
  172. 137/194 object: allow object_as_type to handle arbitrary repositoriesStefan Beller, Feb 6, 2018
  173. 138/194 commit: allow lookup_commit to handle arbitrary repositoriesStefan Beller, Feb 6, 2018
  174. 139/194 sha1_file: allow add_to_alternates_file to handle arbitrary repositoriesStefan Beller, Feb 6, 2018
  175. 140/194 commit: convert commit_graft_pos() to handle arbitrary repositoriesStefan Beller, Feb 6, 2018
  176. 142/194 commit: convert read_graft_file to handle arbitrary repositoriesStefan Beller, Feb 6, 2018
  177. 141/194 commit: convert register_commit_graft to handle arbitrary repositoriesStefan Beller, Feb 6, 2018
  178. 143/194 object: add repository argument to parse_commit_gentlyStefan Beller, Feb 6, 2018
  179. 144/194 commit: add repository argument to parse_commitStefan Beller, Feb 6, 2018
  180. 145/194 commit: add repository argument to set_commit_bufferStefan Beller, Feb 6, 2018
  181. 146/194 commit: add repository argument to get_cached_commit_bufferStefan Beller, Feb 6, 2018
  182. 147/194 commit: add repository argument to unuse_commit_bufferStefan Beller, Feb 6, 2018
  183. 148/194 commit: add repository argument to free_commit_bufferStefan Beller, Feb 6, 2018
  184. 149/194 commit: allow commit buffer functions to handle arbitrary repositoriesStefan Beller, Feb 6, 2018
  185. 150/194 tree: allow lookup_tree to handle arbitrary repositoriesStefan Beller, Feb 6, 2018
  186. 151/194 cache: convert get_graft_file to handle arbitrary repositoriesStefan Beller, Feb 6, 2018
  187. 152/194 shallow: add repository argument to set_alternate_shallow_fileStefan Beller, Feb 6, 2018
  188. 153/194 shallow: add repository argument to register_shallowStefan Beller, Feb 6, 2018
  189. 154/194 shallow: add repository argument to check_shallow_file_for_updateStefan Beller, Feb 6, 2018
  190. 155/194 shallow: add repository argument to is_repository_shallowStefan Beller, Feb 6, 2018
  191. 156/194 migrate cached path to use the_repositoryStefan Beller, Feb 6, 2018
  192. 157/194 shallow: migrate shallow information into the object parserStefan Beller, Feb 6, 2018
  193. 158/194 commit: allow prepare_commit_graft to handle arbitrary repositoriesStefan Beller, Feb 6, 2018
  194. 159/194 commit: allow lookup_commit_graft to handle arbitrary repositoriesStefan Beller, Feb 6, 2018
  195. 160/194 commit: allow arbitrary repository argument for parse_commit_bufferStefan Beller, Feb 6, 2018
  196. 161/194 commit: allow parse_commit_gently to handle arbitrary repositoryStefan Beller, Feb 6, 2018
  197. 162/194 commit: add repository argument to get_merge_bases_many_0Stefan Beller, Feb 6, 2018
  198. 163/194 commit: add repository argument to merge_bases_manyStefan Beller, Feb 6, 2018
  199. 164/194 commit: add repository argument to paint_down_to_commonStefan Beller, Feb 6, 2018
  200. 165/194 commit: allow parse_commit to handle arbitrary repositoriesStefan Beller, Feb 6, 2018
  201. 166/194 commit: allow paint_down_to_common to handle arbitrary repositoriesStefan Beller, Feb 6, 2018
  202. 167/194 commit: allow merge_bases_many to handle arbitrary repositoriesStefan Beller, Feb 6, 2018
  203. 168/194 commit: add repository argument to remove_redundantStefan Beller, Feb 6, 2018
  204. 169/194 commit: allow remove_redundant to handle arbitrary repositoriesStefan Beller, Feb 6, 2018
  205. 170/194 commit: allow get_merge_bases_many_0 to handle arbitrary repositoriesStefan Beller, Feb 6, 2018
  206. 171/194 commit: add repository argument to get_merge_basesStefan Beller, Feb 6, 2018
  207. 172/194 commit: allow get_merge_bases to handle arbitrary repositoriesStefan Beller, Feb 6, 2018
  208. 173/194 blob: allow lookup_blob to handle arbitrary repositoriesStefan Beller, Feb 6, 2018
  209. 174/194 tag: allow lookup_tag to handle arbitrary repositoriesStefan Beller, Feb 6, 2018
  210. 176/194 object: allow parse_object_buffer to handle arbitrary repositoriesStefan Beller, Feb 6, 2018
  211. 175/194 tag: allow parse_tag_buffer to handle arbitrary repositoriesStefan Beller, Feb 6, 2018
  212. 177/194 objects: allow check_sha1_signature to handle arbitrary repositoriesStefan Beller, Feb 6, 2018
  213. 178/194 object: allow parse_object to handle arbitrary repositoriesStefan Beller, Feb 6, 2018
  214. 179/194 tag: allow deref_tag to handle arbitrary repositoriesStefan Beller, Feb 6, 2018
  215. 180/194 commit: allow lookup_commit_reference_gently to handle arbitrary repositoriesStefan Beller, Feb 6, 2018
  216. 181/194 commit: allow lookup_commit_reference to handle arbitrary repositoriesStefan Beller, Feb 6, 2018
  217. 182/194 commit: add repository argument to get_commit_bufferStefan Beller, Feb 6, 2018
  218. 183/194 commit: add repository argument to logmsg_reencodeStefan Beller, Feb 6, 2018
  219. 184/194 pretty: add repository argument to format_commit_messageStefan Beller, Feb 6, 2018
  220. 185/194 commit: allow get_commit_buffer to handle arbitrary repositoriesStefan Beller, Feb 6, 2018
  221. 186/194 pretty: allow logmsg_reencode to handle arbitrary repositoriesStefan Beller, Feb 6, 2018
  222. 187/194 commit: add repository argument to in_merge_bases_manyStefan Beller, Feb 6, 2018
  223. 188/194 commit: add repository argument to in_merge_basesStefan Beller, Feb 6, 2018
  224. 189/194 commit: allow in_merge_bases_many to handle arbitrary repositoriesStefan Beller, Feb 6, 2018
  225. 190/194 commit: allow in_merge_bases to handle arbitrary repositoriesStefan Beller, Feb 6, 2018
  226. 191/194 pretty: allow format_commit_message to handle arbitrary repositoriesStefan Beller, Feb 6, 2018
  227. 192/194 submodule: add repository argument to print_submodule_summaryStefan Beller, Feb 6, 2018
  228. 193/194 submodule: Reorder open_submodule functionStefan Beller, Feb 6, 2018
  229. 194/194 submodule: use submodule repos for object lookupStefan Beller, Feb 6, 2018
  230. Stefan BellerFeb 6, 2018
  231. brian m. carlsonFeb 6, 2018
  232. Stefan BellerFeb 6, 2018
  233. Stefan BellerFeb 6, 2018
  234. Eric SunshineFeb 7, 2018
  235. Duy NguyenFeb 7, 2018
  236. Stefan BellerFeb 7, 2018
  237. Duy NguyenFeb 10, 2018
  238. Jeff HostetlerFeb 7, 2018
  239. Elijah NewrenFeb 8, 2018

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.