v4: - is based on master+mh/ref-remove-empty-directory+mh/submodule-hash instead of mh/submodule-hash alone. It could merge with pu cleanly. - 06/16 from v5, "correct is_per_worktree_ref", is removed. The "remove the use of git_path" patch is updated to handle it correctly even without that patch. More on this later. - update "replace" typo in a commit message The story behind the 06/16 removal is, in my simple view, there are per-repo and per-worktree refs. But refs.c and backends see them as three types: per-worktree, pseudo and normal/per-repo. Refs like ORIG_HEAD are _both_ per-worktree and pseudo. 06/16 reclassifies ORIG_HEAD from pseudo to per-worktree, which triggers a failure in t1400 because as pseudo refs, reflog will not be created while it will be for per-worktree. This new test is on master, not maint. I now fall back to treating both per-worktree and pseudo as per-worktree in files_path() only and keep classification unchanged. Side note, my other two series seem to apply cleanly on top of this v3, so no resend. Nguyễn Thái Ngọc Duy (15): refs-internal.c: make files_log_ref_write() static files-backend: convert git_path() to strbuf_git_path() files-backend: add files_path() files-backend: replace *git_path*() with files_path() refs.c: share is_per_worktree_ref() to files-backend.c files-backend: remove the use of git_path() refs.c: introduce get_main_ref_store() refs: rename lookup_ref_store() to lookup_submodule_ref_store() refs.c: flatten get_ref_store() a bit refs.c: kill register_ref_store(), add register_submodule_ref_store() refs.c: make get_main_ref_store() public and use it path.c: move some code out of strbuf_git_path_submodule() refs: move submodule code out of files-backend.c files-backend: remove submodule_allowed from files_downcast() refs: rename get_ref_store() to get_submodule_ref_store() and make it public path.c | 34 +---- refs.c | 144 +++++++++--------- refs.h | 13 ++ refs/files-backend.c | 406 ++++++++++++++++++++++++++++++++------------------- refs/refs-internal.h | 28 ++-- submodule.c | 31 ++++ submodule.h | 1 + 7 files changed, 396 insertions(+), 261 deletions(-) -- 2.11.0.157.gd943d85