From: "Nguyễn Thái Ngọc Duy" <pclouds@gmail.com>
To: git@vger.kernel.org
Cc: "Junio C Hamano" <gitster@pobox.com>,
"Michael Haggerty" <mhagger@alum.mit.edu>,
"Stefan Beller" <sbeller@google.com>,
"Johannes Schindelin" <Johannes.Schindelin@gmx.de>,
"Nguyễn Thái Ngọc Duy" <pclouds@gmail.com>
Subject: [PATCH/RFC 00/15] Fix git-gc losing objects in multi worktree
Date: Fri, 17 Feb 2017 21:18:53 +0700 [thread overview]
Message-ID: <20170217141908.18012-1-pclouds@gmail.com> (raw)
So here is my latest attempt on fixing this issue. For people who are
not aware of it, git-gc does not take per-worktree refs, reflogs and
indexes into account. An odb prune may leave HEAD and references in other
worktrees pointing to nowhere.
This series is based on my "kill parse_ref()" series [1], which is
based on yet another one, which is on top of mh/submodule-hash. But
you can get everything from my github [2].
The series introduces a new set of refs_* API and replaces the old
*_submodule() one, opening up the opportunity to access refs from
another worktree. rev-list learns a new option, --single-worktree, to
control the new behavior.
reflog iterator from files-backend.c does not support per-worktree
items, so it's updated here to do that. It still looks ugly, but I
think this is a good "middle ground" until compound ref store comes.
At that point we can separate "single worktree" ref store vs "linked
worktree" one.
I'm adding Stefan here as well since I added a new FIXME in
submodule.c in 11/15. I think it's ok (again, for now). But another
look from submodule people would be much better.
[1] http://public-inbox.org/git/%3C20170216120302.5302-1-pclouds@gmail.com%3E/
[2] https://github.com/pclouds/git/commits/prune-in-worktrees-2
Nguyễn Thái Ngọc Duy (15):
revision.h: new flag in struct rev_info wrt. worktree-related refs
revision.c: refactor add_index_objects_to_pending()
revision.c: --indexed-objects add objects from all worktrees
refs: move submodule slash stripping code to get_submodule_ref_store
refs: add refs_read_ref[_full]()
refs: add refs_head_ref()
refs: add refs_for_each_ref()
refs: add a refs_for_each_in() and friends
revision.c: use refs_for_each*() instead of for_each_*_submodule()
refs: remove dead for_each_*_submodule()
revision.c: --all adds HEAD from all worktrees
refs: add refs_for_each_reflog[_ent]()
files-backend: make reflog iterator go through per-worktree reflog
revision.c: --reflog add HEAD reflog from all worktrees
rev-list: expose and document --single-worktree
Documentation/rev-list-options.txt | 8 ++
reachable.c | 1 +
refs.c | 171 ++++++++++++++++++++++++-------------
refs.h | 25 ++++--
refs/files-backend.c | 24 +++++-
revision.c | 130 +++++++++++++++++++++++-----
revision.h | 1 +
submodule.c | 2 +
t/t5304-prune.sh | 37 ++++++++
9 files changed, 305 insertions(+), 94 deletions(-)
--
2.11.0.157.gd943d85
next reply other threads:[~2017-02-17 14:19 UTC|newest]
Thread overview: 33+ messages / expand[flat|nested] mbox.gz Atom feed top
2017-02-17 14:18 Nguyễn Thái Ngọc Duy [this message]
2017-02-17 14:18 ` [PATCH 01/15] revision.h: new flag in struct rev_info wrt. worktree-related refs Nguyễn Thái Ngọc Duy
2017-02-17 14:18 ` [PATCH 02/15] revision.c: refactor add_index_objects_to_pending() Nguyễn Thái Ngọc Duy
2017-02-17 14:18 ` [PATCH 03/15] revision.c: --indexed-objects add objects from all worktrees Nguyễn Thái Ngọc Duy
2017-02-17 14:18 ` [PATCH 04/15] refs: move submodule slash stripping code to get_submodule_ref_store Nguyễn Thái Ngọc Duy
2017-02-17 14:18 ` [PATCH 05/15] refs: add refs_read_ref[_full]() Nguyễn Thái Ngọc Duy
2017-02-17 14:18 ` [PATCH 06/15] refs: add refs_head_ref() Nguyễn Thái Ngọc Duy
2017-02-17 14:19 ` [PATCH 07/15] refs: add refs_for_each_ref() Nguyễn Thái Ngọc Duy
2017-02-17 14:19 ` [PATCH 08/15] refs: add a refs_for_each_in() and friends Nguyễn Thái Ngọc Duy
2017-02-17 14:19 ` [PATCH 09/15] revision.c: use refs_for_each*() instead of for_each_*_submodule() Nguyễn Thái Ngọc Duy
2017-02-17 14:19 ` [PATCH 10/15] refs: remove dead for_each_*_submodule() Nguyễn Thái Ngọc Duy
2017-02-17 14:19 ` [PATCH 11/15] revision.c: --all adds HEAD from all worktrees Nguyễn Thái Ngọc Duy
2017-02-17 14:19 ` [PATCH 12/15] refs: add refs_for_each_reflog[_ent]() Nguyễn Thái Ngọc Duy
2017-02-17 14:19 ` [PATCH 13/15] files-backend: make reflog iterator go through per-worktree reflog Nguyễn Thái Ngọc Duy
2017-02-17 14:19 ` [PATCH 14/15] revision.c: --reflog add HEAD reflog from all worktrees Nguyễn Thái Ngọc Duy
2017-02-17 14:19 ` [PATCH 15/15] rev-list: expose and document --single-worktree Nguyễn Thái Ngọc Duy
2017-02-17 17:09 ` [PATCH/RFC 00/15] Fix git-gc losing objects in multi worktree Johannes Schindelin
2017-03-18 10:11 ` [PATCH v2 00/12] " Nguyễn Thái Ngọc Duy
2017-03-18 10:11 ` [PATCH v2 01/12] revision.h: new flag in struct rev_info wrt. worktree-related refs Nguyễn Thái Ngọc Duy
2017-03-18 10:11 ` [PATCH v2 02/12] revision.c: refactor add_index_objects_to_pending() Nguyễn Thái Ngọc Duy
2017-03-18 10:11 ` [PATCH v2 03/12] revision.c: --indexed-objects add objects from all worktrees Nguyễn Thái Ngọc Duy
2017-03-18 10:11 ` [PATCH v2 04/12] refs.c: refactor get_submodule_ref_store(), share common free block Nguyễn Thái Ngọc Duy
2017-03-18 10:11 ` [PATCH v2 05/12] refs: move submodule slash stripping code to get_submodule_ref_store Nguyễn Thái Ngọc Duy
2017-03-18 10:11 ` [PATCH v2 06/12] refs: add refs_head_ref() Nguyễn Thái Ngọc Duy
2017-03-18 10:11 ` [PATCH v2 07/12] revision.c: use refs_for_each*() instead of for_each_*_submodule() Nguyễn Thái Ngọc Duy
2017-03-18 10:11 ` [PATCH v2 08/12] refs: remove dead for_each_*_submodule() Nguyễn Thái Ngọc Duy
2017-03-18 10:11 ` [PATCH v2 09/12] revision.c: --all adds HEAD from all worktrees Nguyễn Thái Ngọc Duy
2017-03-18 10:11 ` [PATCH v2 10/12] files-backend: make reflog iterator go through per-worktree reflog Nguyễn Thái Ngọc Duy
2017-03-18 10:11 ` [PATCH v2 11/12] revision.c: --reflog add HEAD reflog from all worktrees Nguyễn Thái Ngọc Duy
2017-03-18 10:11 ` [PATCH v2 12/12] rev-list: expose and document --single-worktree Nguyễn Thái Ngọc Duy
2017-03-18 18:00 ` Junio C Hamano
2017-04-19 10:52 ` Duy Nguyen
2017-04-20 2:21 ` Junio C Hamano
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20170217141908.18012-1-pclouds@gmail.com \
--to=pclouds@gmail.com \
--cc=Johannes.Schindelin@gmx.de \
--cc=git@vger.kernel.org \
--cc=gitster@pobox.com \
--cc=mhagger@alum.mit.edu \
--cc=sbeller@google.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.