git.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
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>,
	"Nguyễn Thái Ngọc Duy" <pclouds@gmail.com>
Subject: [PATCH v4 00/16] Fix git-gc losing objects in multi worktree
Date: Wed, 23 Aug 2017 19:36:48 +0700	[thread overview]
Message-ID: <20170823123704.16518-1-pclouds@gmail.com> (raw)

"git gc" when used in multiple worktrees ignore some per-worktree
references: object references in the index, HEAD and reflog. This
series fixes it by making the revision walker include these from all
worktrees by default (and the series is basically split in three parts
in the same order). There's a couple more cleanups in refs.c. Luckily
it does not conflict with anything in 'pu'.

Compared to v3 [1], the largest change is supporting multi worktree in
the reflog iterator. The merge iterator is now used (Micheal was right
all along).

[1] https://public-inbox.org/git/20170419110145.5086-1-pclouds@gmail.com/

Nguyễn Thái Ngọc Duy (16):
  revision.h: new flag in struct rev_info wrt. worktree-related refs
  refs.c: use is_dir_sep() in resolve_gitlink_ref()
  revision.c: refactor add_index_objects_to_pending()
  revision.c: --indexed-objects add objects from all worktrees
  refs.c: refactor get_submodule_ref_store(), share common free block
  refs: move submodule slash stripping code to get_submodule_ref_store
  refs: add refs_head_ref()
  revision.c: use refs_for_each*() instead of for_each_*_submodule()
  refs.c: move for_each_remote_ref_submodule() to submodule.c
  refs: remove dead for_each_*_submodule()
  revision.c: --all adds HEAD from all worktrees
  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
  refs.c: remove fallback-to-main-store code get_submodule_ref_store()
  refs.c: reindent get_submodule_ref_store()

 Documentation/rev-list-options.txt            |   8 ++
 Documentation/technical/api-ref-iteration.txt |   7 +-
 reachable.c                                   |   2 +
 refs.c                                        | 110 ++++++---------------
 refs.h                                        |  20 +---
 refs/files-backend.c                          |  59 +++++++++---
 revision.c                                    | 131 +++++++++++++++++++++-----
 revision.h                                    |   1 +
 submodule.c                                   |   9 ++
 t/t1407-worktree-ref-store.sh                 |  30 ++++++
 t/t5304-prune.sh                              |  37 ++++++++
 worktree.c                                    |  22 +++++
 worktree.h                                    |   8 ++
 13 files changed, 308 insertions(+), 136 deletions(-)

-- 
2.11.0.157.gd943d85


             reply	other threads:[~2017-08-23 12:37 UTC|newest]

Thread overview: 40+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2017-08-23 12:36 Nguyễn Thái Ngọc Duy [this message]
2017-08-23 12:36 ` [PATCH v4 01/16] revision.h: new flag in struct rev_info wrt. worktree-related refs Nguyễn Thái Ngọc Duy
2017-08-23 12:36 ` [PATCH v4 02/16] refs.c: use is_dir_sep() in resolve_gitlink_ref() Nguyễn Thái Ngọc Duy
2017-08-23 19:14   ` Stefan Beller
2017-09-06 11:08     ` Duy Nguyen
2017-09-06 17:41       ` Stefan Beller
2017-08-23 12:36 ` [PATCH v4 03/16] revision.c: refactor add_index_objects_to_pending() Nguyễn Thái Ngọc Duy
2017-08-23 12:36 ` [PATCH v4 04/16] revision.c: --indexed-objects add objects from all worktrees Nguyễn Thái Ngọc Duy
2017-08-23 19:25   ` Stefan Beller
2017-08-23 12:36 ` [PATCH v4 05/16] refs.c: refactor get_submodule_ref_store(), share common free block Nguyễn Thái Ngọc Duy
2017-08-23 19:34   ` Stefan Beller
2017-08-23 12:36 ` [PATCH v4 06/16] refs: move submodule slash stripping code to get_submodule_ref_store Nguyễn Thái Ngọc Duy
2017-09-09  5:45   ` Michael Haggerty
2017-08-23 12:36 ` [PATCH v4 07/16] refs: add refs_head_ref() Nguyễn Thái Ngọc Duy
2017-08-24 21:52   ` Junio C Hamano
2017-09-06 11:23     ` Duy Nguyen
2017-08-23 12:36 ` [PATCH v4 08/16] revision.c: use refs_for_each*() instead of for_each_*_submodule() Nguyễn Thái Ngọc Duy
2017-08-24 21:56   ` Junio C Hamano
2017-08-23 12:36 ` [PATCH v4 09/16] refs.c: move for_each_remote_ref_submodule() to submodule.c Nguyễn Thái Ngọc Duy
2017-08-23 12:36 ` [PATCH v4 10/16] refs: remove dead for_each_*_submodule() Nguyễn Thái Ngọc Duy
2017-08-23 19:45   ` Stefan Beller
2017-09-09  5:59   ` Michael Haggerty
2017-08-23 12:36 ` [PATCH v4 11/16] revision.c: --all adds HEAD from all worktrees Nguyễn Thái Ngọc Duy
2017-08-23 19:54   ` Stefan Beller
2017-09-06 11:19     ` Duy Nguyen
2017-09-06 17:43       ` Stefan Beller
2017-09-09  6:04   ` Michael Haggerty
2017-08-23 12:37 ` [PATCH v4 12/16] files-backend: make reflog iterator go through per-worktree reflog Nguyễn Thái Ngọc Duy
2017-08-24 14:13   ` Richard Maw
2017-09-09  6:30   ` Michael Haggerty
2017-08-23 12:37 ` [PATCH v4 13/16] revision.c: --reflog add HEAD reflog from all worktrees Nguyễn Thái Ngọc Duy
2017-08-23 12:37 ` [PATCH v4 14/16] rev-list: expose and document --single-worktree Nguyễn Thái Ngọc Duy
2017-08-23 20:45   ` Stefan Beller
2017-08-23 12:37 ` [PATCH v4 15/16] refs.c: remove fallback-to-main-store code get_submodule_ref_store() Nguyễn Thái Ngọc Duy
2017-09-09  6:36   ` Michael Haggerty
2017-08-23 12:37 ` [PATCH v4 16/16] refs.c: reindent get_submodule_ref_store() Nguyễn Thái Ngọc Duy
2017-09-09  6:41   ` Michael Haggerty
2017-08-25 11:21 ` [PATCH v4 00/16] Fix git-gc losing objects in multi worktree Michael J Gruber
2017-09-06 10:53   ` Duy Nguyen
2017-09-09  6:45 ` Michael Haggerty

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=20170823123704.16518-1-pclouds@gmail.com \
    --to=pclouds@gmail.com \
    --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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).