object store: grafts and shallow.
cover object store: grafts and shallow.
This applies on top of sb/object-store-alloc[1], and is the next part of the object store series.
I think we're getting close to actually being done in the object store series, as the next series to build on top of this will convert the lookup_{object, commit, ...} functions.
However I marked this series as RFC, as I expect heavy conflicts with the code base. sb/object-store-alloc builds on an older base of the code base and there have been some series that will conflict with this one. For example the patch to migrate path functions into a repository world will collide with one of Dschos series as he added another path helper function there. I am happy to reroll on top of that, but for now I chose sb/object-store-alloc to keep the momentum in the object-store series'.
There is another object store series that is not part of the critical path:
There is a mem leak in the pack files stored in the raw object store. Upon free'ing the repository we do not free its pack files. We cannot free the packfiles, as otherwise the bitmap code would have dangling pointers into packfiles that no longer exists, leading to segfaults. So we'll need to have an object store series covering the bitmap code. I have something local, which I'll send out shortly.
Thanks,
Stefan
[1] with the latest patch replaced as in
https://public-inbox.org/git/[email protected]/
Brandon Williams (3):
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 (6):
object: move grafts to object parser
commit: add repository argument to commit_graft_pos
commit: add repository argument to register_commit_graft
commit: add repository argument to read_graft_file
commit: add repository argument to prepare_commit_graft
commit: add repository argument to lookup_commit_graft
Stefan Beller (10):
object-store: move object access functions to object-store.h
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
cache: convert get_graft_file to handle arbitrary repositories path.c: migrate git_path_ to take a repository argument
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
apply.c | 1 + archive-tar.c | 1 + archive-zip.c | 1 + archive.c | 1 + blame.c | 9 ++- branch.c | 14 ++--- builtin/blame.c | 4 +- builtin/cat-file.c | 1 + builtin/checkout.c | 1 + builtin/clone.c | 1 + builtin/commit-tree.c | 1 + builtin/commit.c | 38 ++++++------- builtin/describe.c | 1 + builtin/difftool.c | 1 + builtin/fast-export.c | 1 + builtin/fetch.c | 7 ++- builtin/fmt-merge-msg.c | 1 + builtin/hash-object.c | 1 + builtin/log.c | 1 + builtin/ls-tree.c | 1 + builtin/merge-tree.c | 1 + builtin/merge.c | 37 ++++++------ builtin/mktag.c | 1 + builtin/mktree.c | 1 + builtin/notes.c | 1 + builtin/pack-objects.c | 6 +- builtin/prune.c | 3 +- builtin/pull.c | 4 +- builtin/receive-pack.c | 3 +- builtin/reflog.c | 1 + builtin/remote.c | 1 + builtin/reset.c | 2 +- builtin/rev-list.c | 1 + builtin/rev-parse.c | 3 +- builtin/show-ref.c | 1 + builtin/tag.c | 1 + builtin/unpack-file.c | 1 + builtin/unpack-objects.c | 1 + builtin/verify-commit.c | 1 + bulk-checkin.c | 1 + bundle.c | 1 + cache-tree.c | 1 + cache.h | 119 +-------------------------------------- combine-diff.c | 1 + commit.c | 77 +++++++++++++------------ commit.h | 10 ++-- config.c | 1 + convert.c | 1 + diff.c | 1 + diffcore-rename.c | 1 + dir.c | 1 + entry.c | 1 + environment.c | 8 +-- fetch-pack.c | 9 +-- fsck.c | 3 +- git.c | 2 +- grep.c | 1 + list-objects-filter.c | 1 + list-objects.c | 1 + log-tree.c | 1 + mailmap.c | 1 + match-trees.c | 1 + merge-blobs.c | 1 + merge-recursive.c | 1 + notes-cache.c | 1 + notes-merge.c | 1 + notes.c | 1 + object-store.h | 117 ++++++++++++++++++++++++++++++++++++++ object.c | 4 ++ object.h | 10 ++++ pack-bitmap-write.c | 1 + packfile.h | 5 ++ path.c | 18 +++--- path.h | 40 ++++++++++--- read-cache.c | 1 + ref-filter.c | 1 + refs.c | 1 + remote-testsvn.c | 1 + remote.c | 1 + repository.h | 5 ++ rerere.c | 8 ++- revision.c | 1 + send-pack.c | 7 ++- sequencer.c | 38 +++++++------ shallow.c | 74 ++++++++++++------------ submodule-config.c | 1 + tag.c | 1 + tree-walk.c | 1 + tree.c | 1 + unpack-trees.c | 1 + upload-pack.c | 10 ++-- walker.c | 1 + wt-status.c | 8 +-- xdiff-interface.c | 1 + 94 files changed, 450 insertions(+), 314 deletions(-)
Signature · 1 line
2.17.0.582.gccdcbd54c44.dirty
PATCH 1/19 object-store: move object access functions to object-store.h
This should make these functions easier to find and cache.h less overwhelming to read.
In particular, this moves:
- read_object_file
- oid_object_info
- write_object_file
As a result, most of the codebase needs to #include object-store.h. In this patch the #include is only added to files that would fail to compile otherwise. It would be better to #include wherever identifiers from the header are used. That can happen later when we have better tooling for it.
--- apply.c | 1 + archive-tar.c | 1 + archive-zip.c | 1 + archive.c | 1 + blame.c | 1 + builtin/blame.c | 1 + builtin/cat-file.c | 1 + builtin/checkout.c | 1 + builtin/clone.c | 1 + builtin/commit-tree.c | 1 + builtin/describe.c | 1 + builtin/difftool.c | 1 + builtin/fast-export.c | 1 + builtin/fetch.c | 1 + builtin/fmt-merge-msg.c | 1 + builtin/hash-object.c | 1 + builtin/log.c | 1 + builtin/ls-tree.c | 1 + builtin/merge-tree.c | 1 + builtin/mktag.c | 1 + builtin/mktree.c | 1 + builtin/notes.c | 1 + builtin/prune.c | 1 + builtin/receive-pack.c | 1 + builtin/reflog.c | 1 + builtin/remote.c | 1 + builtin/rev-list.c | 1 + builtin/show-ref.c | 1 + builtin/tag.c | 1 + builtin/unpack-file.c | 1 + builtin/unpack-objects.c | 1 + builtin/verify-commit.c | 1 + bulk-checkin.c | 1 + bundle.c | 1 + cache-tree.c | 1 + cache.h | 117 --------------------------------------- combine-diff.c | 1 + commit.c | 1 + config.c | 1 + convert.c | 1 + diff.c | 1 + diffcore-rename.c | 1 + dir.c | 1 + entry.c | 1 + fetch-pack.c | 1 + fsck.c | 1 + grep.c | 1 + list-objects-filter.c | 1 + list-objects.c | 1 + log-tree.c | 1 + mailmap.c | 1 + match-trees.c | 1 + merge-blobs.c | 1 + merge-recursive.c | 1 + notes-cache.c | 1 + notes-merge.c | 1 + notes.c | 1 + object-store.h | 117 +++++++++++++++++++++++++++++++++++++++ object.c | 1 + pack-bitmap-write.c | 1 + packfile.h | 5 ++ read-cache.c | 1 + ref-filter.c | 1 + refs.c | 1 + remote-testsvn.c | 1 + remote.c | 1 + rerere.c | 1 + revision.c | 1 + send-pack.c | 1 + sequencer.c | 1 + shallow.c | 1 + submodule-config.c | 1 + tag.c | 1 + tree-walk.c | 1 + tree.c | 1 + unpack-trees.c | 1 + upload-pack.c | 1 + walker.c | 1 + xdiff-interface.c | 1 + 79 files changed, 198 insertions(+), 117 deletions(-)
apply.c +1 -0
@@ -9,6 +9,7 @@#include "cache.h" #include "config.h" +#include "object-store.h" #include "blob.h" #include "delta.h" #include "diff.h"
archive-tar.c +1 -0
@@ -5,6 +5,7 @@#include "config.h" #include "tar.h" #include "archive.h" +#include "object-store.h" #include "streaming.h" #include "run-command.h"
archive-zip.c +1 -0
@@ -6,6 +6,7 @@#include "archive.h" #include "streaming.h" #include "utf8.h" +#include "object-store.h" #include "userdiff.h" #include "xdiff-interface.h"
archive.c +1 -0
@@ -1,6 +1,7 @@#include "cache.h" #include "config.h" #include "refs.h" +#include "object-store.h" #include "commit.h" #include "tree-walk.h" #include "attr.h"
blame.c +1 -0
@@ -1,5 +1,6 @@#include "cache.h" #include "refs.h" +#include "object-store.h" #include "cache-tree.h" #include "mergesort.h" #include "diff.h"
builtin/blame.c +1 -0
@@ -22,6 +22,7 @@#include "line-log.h" #include "dir.h" #include "progress.h" +#include "object-store.h" #include "blame.h" static char blame_usage[] =N_ ("git blame [<options>] [<rev-opts>] [<rev>] [--] <file>" );
builtin/cat-file.c +1 -0
@@ -13,6 +13,7 @@#include "tree-walk.h" #include "sha1-array.h" #include "packfile.h" +#include "object-store.h" struct batch_options {int enabled;
builtin/checkout.c +1 -0
@@ -4,6 +4,7 @@#include "lockfile.h" #include "parse-options.h" #include "refs.h" +#include "object-store.h" #include "commit.h" #include "tree.h" #include "tree-walk.h"
builtin/clone.c +1 -0
@@ -14,6 +14,7 @@#include "parse-options.h" #include "fetch-pack.h" #include "refs.h" +#include "object-store.h" #include "tree.h" #include "tree-walk.h" #include "unpack-trees.h"
builtin/commit-tree.c +1 -0
@@ -5,6 +5,7 @@*/ #include "cache.h" #include "config.h" +#include "object-store.h" #include "commit.h" #include "tree.h" #include "builtin.h"
builtin/describe.c +1 -0
@@ -13,6 +13,7 @@#include "hashmap.h" #include "argv-array.h" #include "run-command.h" +#include "object-store.h" #include "revision.h" #include "list-objects.h"
builtin/difftool.c +1 -0
@@ -20,6 +20,7 @@#include "argv-array.h" #include "strbuf.h" #include "lockfile.h" +#include "object-store.h" #include "dir.h" static char *diff_gui_tool;
builtin/fast-export.c +1 -0
@@ -7,6 +7,7 @@#include "cache.h" #include "config.h" #include "refs.h" +#include "object-store.h" #include "commit.h" #include "object.h" #include "tag.h"
builtin/fetch.c +1 -0
@@ -5,6 +5,7 @@#include "config.h" #include "repository.h" #include "refs.h" +#include "object-store.h" #include "commit.h" #include "builtin.h" #include "string-list.h"
builtin/fmt-merge-msg.c +1 -0
@@ -2,6 +2,7 @@#include "cache.h" #include "config.h" #include "refs.h" +#include "object-store.h" #include "commit.h" #include "diff.h" #include "revision.h"
builtin/hash-object.c +1 -0
@@ -6,6 +6,7 @@*/ #include "builtin.h" #include "config.h" +#include "object-store.h" #include "blob.h" #include "quote.h" #include "parse-options.h"
builtin/log.c +1 -0
@@ -7,6 +7,7 @@#include "cache.h" #include "config.h" #include "refs.h" +#include "object-store.h" #include "color.h" #include "commit.h" #include "diff.h"
builtin/ls-tree.c +1 -0
@@ -5,6 +5,7 @@*/ #include "cache.h" #include "config.h" +#include "object-store.h" #include "blob.h" #include "tree.h" #include "commit.h"
builtin/merge-tree.c +1 -0
@@ -1,6 +1,7 @@#include "builtin.h" #include "tree-walk.h" #include "xdiff-interface.h" +#include "object-store.h" #include "blob.h" #include "exec_cmd.h" #include "merge-blobs.h"
builtin/mktag.c +1 -0
@@ -1,6 +1,7 @@#include "builtin.h" #include "tag.h" #include "replace-object.h" +#include "object-store.h" /* * A signature file has a very simple fixed format: four lines
builtin/mktree.c +1 -0
@@ -7,6 +7,7 @@#include "quote.h" #include "tree.h" #include "parse-options.h" +#include "object-store.h" static struct treeent { unsigned mode;
builtin/notes.c +1 -0
@@ -11,6 +11,7 @@#include "config.h" #include "builtin.h" #include "notes.h" +#include "object-store.h" #include "blob.h" #include "pretty.h" #include "refs.h"
builtin/prune.c +1 -0
@@ -6,6 +6,7 @@#include "reachable.h" #include "parse-options.h" #include "progress.h" +#include "object-store.h" static const char *const prune_usage[] = {N_ ("git prune [-n] [-v] [--progress] [--expire <time>] [--] [<head>...]" ),
builtin/receive-pack.c +1 -0
@@ -25,6 +25,7 @@#include "tmp-objdir.h" #include "oidset.h" #include "packfile.h" +#include "object-store.h" #include "protocol.h" static const char *const receive_pack_usage[] = {
builtin/reflog.c +1 -0
@@ -1,6 +1,7 @@#include "builtin.h" #include "config.h" #include "lockfile.h" +#include "object-store.h" #include "commit.h" #include "refs.h" #include "dir.h"
builtin/remote.c +1 -0
@@ -7,6 +7,7 @@#include "strbuf.h" #include "run-command.h" #include "refs.h" +#include "object-store.h" #include "argv-array.h" static const char *const builtin_remote_usage[] = {
builtin/rev-list.c +1 -0
@@ -6,6 +6,7 @@#include "list-objects.h" #include "list-objects-filter.h" #include "list-objects-filter-options.h" +#include "object-store.h" #include "pack.h" #include "pack-bitmap.h" #include "builtin.h"
builtin/show-ref.c +1 -0
@@ -1,6 +1,7 @@#include "builtin.h" #include "cache.h" #include "refs.h" +#include "object-store.h" #include "object.h" #include "tag.h" #include "string-list.h"
builtin/tag.c +1 -0
@@ -10,6 +10,7 @@#include "config.h" #include "builtin.h" #include "refs.h" +#include "object-store.h" #include "tag.h" #include "run-command.h" #include "parse-options.h"
builtin/unpack-file.c +1 -0
@@ -1,5 +1,6 @@#include "builtin.h" #include "config.h" +#include "object-store.h" static char *create_temp_file (struct object_id *oid) {
builtin/unpack-objects.c +1 -0
@@ -1,6 +1,7 @@#include "builtin.h" #include "cache.h" #include "config.h" +#include "object-store.h" #include "object.h" #include "delta.h" #include "pack.h"
builtin/verify-commit.c +1 -0
@@ -8,6 +8,7 @@#include "cache.h" #include "config.h" #include "builtin.h" +#include "object-store.h" #include "commit.h" #include "run-command.h" #include <signal.h>
bulk-checkin.c +1 -0
@@ -8,6 +8,7 @@#include "pack.h" #include "strbuf.h" #include "packfile.h" +#include "object-store.h" static struct bulk_checkin_state { unsigned plugged:1;
bundle.c +1 -0
@@ -1,6 +1,7 @@#include "cache.h" #include "lockfile.h" #include "bundle.h" +#include "object-store.h" #include "object.h" #include "commit.h" #include "diff.h"
cache-tree.c +1 -0
@@ -3,6 +3,7 @@#include "tree.h" #include "tree-walk.h" #include "cache-tree.h" +#include "object-store.h" #ifndef DEBUG #define DEBUG 0
cache.h +0 -117
135 lines not on this page · raw message
combine-diff.c +1 -0
@@ -1,4 +1,5 @@#include "cache.h" +#include "object-store.h" #include "commit.h" #include "blob.h" #include "diff.h"
commit.c +1 -0
@@ -1,6 +1,7 @@#include "cache.h" #include "tag.h" #include "commit.h" +#include "object-store.h" #include "pkt-line.h" #include "utf8.h" #include "diff.h"
config.c +1 -0
@@ -14,6 +14,7 @@#include "quote.h" #include "hashmap.h" #include "string-list.h" +#include "object-store.h" #include "utf8.h" #include "dir.h"
convert.c +1 -0
@@ -1,6 +1,7 @@#define NO_THE_INDEX_COMPATIBILITY_MACROS #include "cache.h" #include "config.h" +#include "object-store.h" #include "attr.h" #include "run-command.h" #include "quote.h"
diff.c +1 -0
@@ -13,6 +13,7 @@#include "attr.h" #include "run-command.h" #include "utf8.h" +#include "object-store.h" #include "userdiff.h" #include "submodule-config.h" #include "submodule.h"
diffcore-rename.c +1 -0
@@ -4,6 +4,7 @@#include "cache.h" #include "diff.h" #include "diffcore.h" +#include "object-store.h" #include "hashmap.h" #include "progress.h"
dir.c +1 -0
@@ -11,6 +11,7 @@#include "cache.h" #include "config.h" #include "dir.h" +#include "object-store.h" #include "attr.h" #include "refs.h" #include "wildmatch.h"
entry.c +1 -0
@@ -1,5 +1,6 @@#include "cache.h" #include "blob.h" +#include "object-store.h" #include "dir.h" #include "streaming.h" #include "submodule.h"
fetch-pack.c +1 -0
@@ -19,6 +19,7 @@#include "sha1-array.h" #include "oidset.h" #include "packfile.h" +#include "object-store.h" static int transfer_unpack_limit =-1 ;static int fetch_unpack_limit =-1 ;
fsck.c +1 -0
@@ -1,4 +1,5 @@#include "cache.h" +#include "object-store.h" #include "object.h" #include "blob.h" #include "tree.h"
grep.c +1 -0
@@ -1,6 +1,7 @@#include "cache.h" #include "config.h" #include "grep.h" +#include "object-store.h" #include "userdiff.h" #include "xdiff-interface.h" #include "diff.h"
list-objects-filter.c +1 -0
@@ -11,6 +11,7 @@#include "list-objects-filter.h" #include "list-objects-filter-options.h" #include "oidset.h" +#include "object-store.h" /* Remember to update object flag allocation in object.h */ /*
list-objects.c +1 -0
@@ -10,6 +10,7 @@#include "list-objects-filter.h" #include "list-objects-filter-options.h" #include "packfile.h" +#include "object-store.h" static void process_blob(struct rev_info *revs, struct blob *blob,
log-tree.c +1 -0
@@ -1,6 +1,7 @@#include "cache.h" #include "config.h" #include "diff.h" +#include "object-store.h" #include "commit.h" #include "tag.h" #include "graph.h"
mailmap.c +1 -0
@@ -1,6 +1,7 @@#include "cache.h" #include "string-list.h" #include "mailmap.h" +#include "object-store.h" #define DEBUG_MAILMAP 0#if DEBUG_MAILMAP
match-trees.c +1 -0
@@ -1,6 +1,7 @@#include "cache.h" #include "tree.h" #include "tree-walk.h" +#include "object-store.h" static int score_missing (unsigned mode,const char *path) {
merge-blobs.c +1 -0
@@ -4,6 +4,7 @@#include "ll-merge.h" #include "blob.h" #include "merge-blobs.h" +#include "object-store.h" static int fill_mmfile_blob (mmfile_t *f,struct blob *obj) {
merge-recursive.c +1 -0
@@ -8,6 +8,7 @@#include "advice.h" #include "lockfile.h" #include "cache-tree.h" +#include "object-store.h" #include "commit.h" #include "blob.h" #include "builtin.h"
notes-cache.c +1 -0
@@ -1,5 +1,6 @@#include "cache.h" #include "notes-cache.h" +#include "object-store.h" #include "commit.h" #include "refs.h"
notes-merge.c +1 -0
@@ -1,6 +1,7 @@#include "cache.h" #include "commit.h" #include "refs.h" +#include "object-store.h" #include "diff.h" #include "diffcore.h" #include "xdiff-interface.h"
notes.c +1 -0
@@ -1,6 +1,7 @@#include "cache.h" #include "config.h" #include "notes.h" +#include "object-store.h" #include "blob.h" #include "tree.h" #include "utf8.h"
object-store.h +117 -0
121 lines not on this page · raw message
object.c +1 -0
@@ -1,6 +1,7 @@#include "cache.h" #include "object.h" #include "replace-object.h" +#include "object-store.h" #include "blob.h" #include "tree.h" #include "commit.h"
pack-bitmap-write.c +1 -0
@@ -1,4 +1,5 @@#include "cache.h" +#include "object-store.h" #include "commit.h" #include "tag.h" #include "diff.h"
packfile.h +5 -0
@@ -3,6 +3,11 @@#include "oidset.h" +/* in object-store.h */ +struct packed_git ; +struct object_info ; +enum object_type ; +/* * Generate the filename to be used for a pack file with checksum "sha1" and * extension "ext". The result is written into the strbuf "buf", overwriting
read-cache.c +1 -0
@@ -11,6 +11,7 @@#include "cache-tree.h" #include "refs.h" #include "dir.h" +#include "object-store.h" #include "tree.h" #include "commit.h" #include "blob.h"
ref-filter.c +1 -0
@@ -3,6 +3,7 @@#include "parse-options.h" #include "refs.h" #include "wildmatch.h" +#include "object-store.h" #include "commit.h" #include "remote.h" #include "color.h"
refs.c +1 -0
@@ -9,6 +9,7 @@#include "iterator.h" #include "refs.h" #include "refs/refs-internal.h" +#include "object-store.h" #include "object.h" #include "tag.h" #include "submodule.h"
remote-testsvn.c +1 -0
@@ -1,6 +1,7 @@#include "cache.h" #include "refs.h" #include "remote.h" +#include "object-store.h" #include "strbuf.h" #include "url.h" #include "exec_cmd.h"
remote.c +1 -0
@@ -2,6 +2,7 @@#include "config.h" #include "remote.h" #include "refs.h" +#include "object-store.h" #include "commit.h" #include "diff.h" #include "revision.h"
rerere.c +1 -0
@@ -9,6 +9,7 @@#include "ll-merge.h" #include "attr.h" #include "pathspec.h" +#include "object-store.h" #include "sha1-lookup.h" #define RESOLVED 0
revision.c +1 -0
@@ -1,4 +1,5 @@#include "cache.h" +#include "object-store.h" #include "tag.h" #include "blob.h" #include "tree.h"
send-pack.c +1 -0
@@ -2,6 +2,7 @@#include "config.h" #include "commit.h" #include "refs.h" +#include "object-store.h" #include "pkt-line.h" #include "sideband.h" #include "run-command.h"
sequencer.c +1 -0
@@ -2,6 +2,7 @@#include "config.h" #include "lockfile.h" #include "dir.h" +#include "object-store.h" #include "object.h" #include "commit.h" #include "sequencer.h"
shallow.c +1 -0
@@ -1,6 +1,7 @@#include "cache.h" #include "tempfile.h" #include "lockfile.h" +#include "object-store.h" #include "commit.h" #include "tag.h" #include "pkt-line.h"
submodule-config.c +1 -0
@@ -4,6 +4,7 @@#include "submodule-config.h" #include "submodule.h" #include "strbuf.h" +#include "object-store.h" #include "parse-options.h" /*
tag.c +1 -0
@@ -1,5 +1,6 @@#include "cache.h" #include "tag.h" +#include "object-store.h" #include "commit.h" #include "tree.h" #include "blob.h"
tree-walk.c +1 -0
@@ -2,6 +2,7 @@#include "tree-walk.h" #include "unpack-trees.h" #include "dir.h" +#include "object-store.h" #include "tree.h" #include "pathspec.h"
tree.c +1 -0
@@ -2,6 +2,7 @@#include "cache.h" #include "cache-tree.h" #include "tree.h" +#include "object-store.h" #include "blob.h" #include "commit.h" #include "tag.h"
unpack-trees.c +1 -0
@@ -15,6 +15,7 @@#include "submodule.h" #include "submodule-config.h" #include "fsmonitor.h" +#include "object-store.h" #include "fetch-object.h" /*
upload-pack.c +1 -0
@@ -3,6 +3,7 @@#include "refs.h" #include "pkt-line.h" #include "sideband.h" +#include "object-store.h" #include "tag.h" #include "object.h" #include "commit.h"
walker.c +1 -0
@@ -1,5 +1,6 @@#include "cache.h" #include "walker.h" +#include "object-store.h" #include "commit.h" #include "tree.h" #include "tree-walk.h"
xdiff-interface.c +1 -0
@@ -1,5 +1,6 @@#include "cache.h" #include "config.h" +#include "object-store.h" #include "xdiff-interface.h" #include "xdiff/xtypes.h" #include "xdiff/xdiffi.h"
Signature · 1 line
2.17.0.582.gccdcbd54c44.dirty
PATCH 2/19 object: move grafts to object parser
In reply to Stefan BellerFrom: Jonathan Nieder <[email protected]>
Grafts are only meaningful in the context of a single repository. Therefore they cannot be global.
--- commit.c | 42 +++++++++++++++++++++++------------------- object.h | 4 ++++ 2 files changed, 27 insertions(+), 19 deletions(-)
commit.c +23 -19
@@ -1,6 +1,7 @@#include "cache.h" #include "tag.h" #include "commit.h" +#include "repository.h" #include "object-store.h" #include "pkt-line.h" #include "utf8.h"
@@ -97,9 +98,6 @@ static timestamp_t parse_commit_date(const char *buf, const char *tail)return parse_timestamp (dateptr,NULL ,10 ); } -static struct commit_graft **commit_graft; -static int commit_graft_alloc, commit_graft_nr; -static const unsigned char *commit_graft_sha1_access (size_t index,void *table) {struct commit_graft **commit_graft_table = table;
@@ -108,7 +106,8 @@ static const unsigned char *commit_graft_sha1_access(size_t index, void *table)static int commit_graft_pos (const unsigned char *sha1) { -return sha1_pos (sha1, commit_graft, commit_graft_nr, +return sha1_pos (sha1, the_repository->parsed_objects->grafts, + the_repository->parsed_objects->grafts_nr, commit_graft_sha1_access); }
@@ -120,18 +119,22 @@ int register_commit_graft(struct commit_graft *graft, int ignore_dups)if (ignore_dups)free (graft);else { -free (commit_graft[pos]); - commit_graft[pos] = graft; +free (the_repository->parsed_objects->grafts[pos]); + the_repository->parsed_objects->grafts[pos] = graft; }return 1 ; } pos = -pos -1 ; -ALLOC_GROW (commit_graft, commit_graft_nr +1 , commit_graft_alloc); - commit_graft_nr++; -if (pos < commit_graft_nr) -MOVE_ARRAY (commit_graft + pos +1 , commit_graft + pos, - commit_graft_nr - pos -1 ); - commit_graft[pos] = graft; +ALLOC_GROW (the_repository->parsed_objects->grafts, + the_repository->parsed_objects->grafts_nr +1 , + the_repository->parsed_objects->grafts_alloc); + the_repository->parsed_objects->grafts_nr++; +if (pos < the_repository->parsed_objects->grafts_nr) +memmove (the_repository->parsed_objects->grafts + pos +1 , + the_repository->parsed_objects->grafts + pos, + (the_repository->parsed_objects->grafts_nr - pos -1 ) * +sizeof (*the_repository->parsed_objects->grafts)); + the_repository->parsed_objects->grafts[pos] = graft;return 0 ; }
@@ -213,14 +216,14 @@ struct commit_graft *lookup_commit_graft(const struct object_id *oid) pos =commit_graft_pos (oid->hash);if (pos <0 )return NULL ; -return commit_graft[pos]; +return the_repository->parsed_objects->grafts[pos]; }int for_each_commit_graft (each_commit_graft_fn fn,void *cb_data) {int i, ret; -for (i = ret =0 ; i < commit_graft_nr && !ret; i++) - ret =fn (commit_graft[i], cb_data); +for (i = ret =0 ; i < the_repository->parsed_objects->grafts_nr && !ret; i++) + ret =fn (the_repository->parsed_objects->grafts[i], cb_data);return ret; }
@@ -229,10 +232,11 @@ int unregister_shallow(const struct object_id *oid)int pos =commit_graft_pos (oid->hash);if (pos <0 )return -1 ; -if (pos +1 < commit_graft_nr) -MOVE_ARRAY (commit_graft + pos, commit_graft + pos +1 , - commit_graft_nr - pos -1 ); - commit_graft_nr--; +if (pos +1 < the_repository->parsed_objects->grafts_nr) +MOVE_ARRAY (the_repository->parsed_objects->grafts + pos, + the_repository->parsed_objects->grafts + pos +1 , + the_repository->parsed_objects->grafts_nr - pos -1 ); + the_repository->parsed_objects->grafts_nr--;return 0 ; }
object.h +4 -0
@@ -12,6 +12,10 @@ struct parsed_object_pool {struct alloc_state *tag_state;struct alloc_state *object_state;unsigned commit_count; + +/* parent substitutions from .git/info/grafts and .git/shallow */ +struct commit_graft **grafts; +int grafts_alloc, grafts_nr; };struct parsed_object_pool *parsed_object_pool_new (void );
Signature · 1 line
2.17.0.582.gccdcbd54c44.dirty
PATCH 3/19 commit: add repository argument to commit_graft_pos
In reply to Stefan BellerFrom: Jonathan Nieder <[email protected]>
Add a repository argument to allow callers of commit_graft_pos to be more specific about which repository to handle. This is a small mechanical change; it doesn't change the implementation to handle repositories other than the_repository yet.
As with the previous commits, use a macro to catch callers passing a repository other than the_repository at compile time.
--- commit.c | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-)
commit.c +5 -4
@@ -104,7 +104,8 @@ static const unsigned char *commit_graft_sha1_access(size_t index, void *table)return commit_graft_table[index]->oid.hash; } -static int commit_graft_pos (const unsigned char *sha1) +#define commit_graft_pos (r, s) commit_graft_pos_##r(s) +static int commit_graft_pos_the_repository (const unsigned char *sha1) { return sha1_pos(sha1, the_repository->parsed_objects->grafts, the_repository->parsed_objects->grafts_nr,
@@ -113,7 +114,7 @@ static int commit_graft_pos(const unsigned char *sha1)int register_commit_graft (struct commit_graft *graft,int ignore_dups) { -int pos =commit_graft_pos (graft->oid.hash); +int pos =commit_graft_pos (the_repository, graft->oid.hash);if (0 <= pos) {if (ignore_dups)
@@ -213,7 +214,7 @@ struct commit_graft *lookup_commit_graft(const struct object_id *oid) {int pos;prepare_commit_graft (); - pos =commit_graft_pos (oid->hash); + pos =commit_graft_pos (the_repository, oid->hash);if (pos <0 )return NULL ;return the_repository->parsed_objects->grafts[pos];
@@ -229,7 +230,7 @@ int for_each_commit_graft(each_commit_graft_fn fn, void *cb_data)int unregister_shallow (const struct object_id *oid) { -int pos =commit_graft_pos (oid->hash); +int pos =commit_graft_pos (the_repository, oid->hash);if (pos <0 )return -1 ;if (pos +1 < the_repository->parsed_objects->grafts_nr)
Signature · 1 line
2.17.0.582.gccdcbd54c44.dirty
PATCH 4/19 commit: add repository argument to register_commit_graft
In reply to Stefan BellerFrom: Jonathan Nieder <[email protected]>
Add a repository argument to allow callers of register_commit_graft to be more specific about which repository to handle. This is a small mechanical change; it doesn't change the implementation to handle repositories other than the_repository yet.
As with the previous commits, use a macro to catch callers passing a repository other than the_repository at compile time.
--- builtin/blame.c | 3 ++- commit.c | 4 ++-- commit.h | 3 ++- shallow.c | 3 ++- 4 files changed, 8 insertions(+), 5 deletions(-)
builtin/blame.c +2 -1
@@ -8,6 +8,7 @@#include "cache.h" #include "config.h" #include "builtin.h" +#include "repository.h" #include "commit.h" #include "diff.h" #include "revision.h"
@@ -491,7 +492,7 @@ static int read_ancestry(const char *graft_file)/* The format is just "Commit Parent1 Parent2 ...\n" */ struct commit_graft *graft =read_graft_line (&buf);if (graft) -register_commit_graft (graft,0 ); +register_commit_graft (the_repository, graft,0 ); }fclose (fp);strbuf_release (&buf);
commit.c +2 -2
@@ -112,7 +112,7 @@ static int commit_graft_pos_the_repository(const unsigned char *sha1) commit_graft_sha1_access); } -int register_commit_graft (struct commit_graft *graft,int ignore_dups) +int register_commit_graft_the_repository (struct commit_graft *graft,int ignore_dups) {int pos =commit_graft_pos (the_repository, graft->oid.hash);
@@ -188,7 +188,7 @@ static int read_graft_file(const char *graft_file)struct commit_graft *graft =read_graft_line (&buf);if (!graft)continue ; -if (register_commit_graft (graft,1 )) +if (register_commit_graft (the_repository, graft,1 ))error ("duplicate graft data: %s" , buf.buf); }fclose (fp);
commit.h +2 -1
@@ -174,7 +174,8 @@ struct commit_graft {typedef int (*each_commit_graft_fn )(const struct commit_graft *,void *);struct commit_graft *read_graft_line (struct strbuf *line); -int register_commit_graft (struct commit_graft *,int ); +#define register_commit_graft (r, g, i) register_commit_graft_##r(g, i) +int register_commit_graft_the_repository (struct commit_graft *,int );struct commit_graft *lookup_commit_graft (const struct object_id *oid);extern struct commit_list *get_merge_bases (struct commit *rev1,struct commit *rev2);
shallow.c +2 -1
@@ -1,4 +1,5 @@#include "cache.h" +#include "repository.h" #include "tempfile.h" #include "lockfile.h" #include "object-store.h"
@@ -38,7 +39,7 @@ int register_shallow(const struct object_id *oid) graft->nr_parent =-1 ;if (commit && commit->object.parsed) commit->parents =NULL ; -return register_commit_graft (graft,0 ); +return register_commit_graft (the_repository, graft,0 ); }int is_repository_shallow (void )
Signature · 1 line
2.17.0.582.gccdcbd54c44.dirty
PATCH 5/19 commit: add repository argument to read_graft_file
In reply to Stefan BellerFrom: Jonathan Nieder <[email protected]>
Add a repository argument to allow the caller of read_graft_file to be more specific about which repository to handle. This is a small mechanical change; it doesn't change the implementation to handle repositories other than the_repository yet.
As with the previous commits, use a macro to catch callers passing a repository other than the_repository at compile time.
--- commit.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-)
commit.c +3 -2
@@ -177,7 +177,8 @@ struct commit_graft *read_graft_line(struct strbuf *line)return NULL ; } -static int read_graft_file (const char *graft_file) +#define read_graft_file (r, f) read_graft_file_##r(f) +static int read_graft_file_the_repository (const char *graft_file) {FILE *fp =fopen_or_warn (graft_file,"r" );struct strbuf buf =STRBUF_INIT ;
@@ -204,7 +205,7 @@ static void prepare_commit_graft(void)if (commit_graft_prepared)return ; graft_file =get_graft_file (); -read_graft_file (graft_file); +read_graft_file (the_repository, graft_file);/* make sure shallows are read */ is_repository_shallow (); commit_graft_prepared =1 ;
Signature · 1 line
2.17.0.582.gccdcbd54c44.dirty
PATCH 6/19 commit: add repository argument to prepare_commit_graft
In reply to Stefan BellerFrom: Jonathan Nieder <[email protected]>
Add a repository argument to allow the caller of prepare_commit_graft to be more specific about which repository to handle. This is a small mechanical change; it doesn't change the implementation to handle repositories other than the_repository yet.
As with the previous commits, use a macro to catch callers passing a repository other than the_repository at compile time.
--- commit.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-)
commit.c +3 -2
@@ -197,7 +197,8 @@ static int read_graft_file_the_repository(const char *graft_file)return 0 ; } -static void prepare_commit_graft (void ) +#define prepare_commit_graft (r) prepare_commit_graft_##r() +static void prepare_commit_graft_the_repository (void ) {static int commit_graft_prepared;char *graft_file;
@@ -214,7 +215,7 @@ static void prepare_commit_graft(void)struct commit_graft *lookup_commit_graft (const struct object_id *oid) {int pos; -prepare_commit_graft (); +prepare_commit_graft (the_repository); pos =commit_graft_pos (the_repository, oid->hash);if (pos <0 )return NULL ;
Signature · 1 line
2.17.0.582.gccdcbd54c44.dirty
PATCH 7/19 commit: add repository argument to lookup_commit_graft
In reply to Stefan BellerFrom: Jonathan Nieder <[email protected]>
Add a repository argument to allow callers of lookup_commit_graft to be more specific about which repository to handle. This is a small mechanical change; it doesn't change the implementation to handle repositories other than the_repository yet.
As with the previous commits, use a macro to catch callers passing a repository other than the_repository at compile time.
The included coccinelle semantic patch will adapt any new callers in the diff produced by make coccicheck.
--- commit.c | 4 ++-- commit.h | 3 ++- fsck.c | 2 +- shallow.c | 5 +++-- 4 files changed, 8 insertions(+), 6 deletions(-)
commit.c +2 -2
@@ -212,7 +212,7 @@ static void prepare_commit_graft_the_repository(void) commit_graft_prepared =1 ; } -struct commit_graft *lookup_commit_graft (const struct object_id *oid) +struct commit_graft *lookup_commit_graft_the_repository (const struct object_id *oid) {int pos;prepare_commit_graft (the_repository);
@@ -359,7 +359,7 @@ int parse_commit_buffer(struct commit *item, const void *buffer, unsigned long s bufptr += tree_entry_len +1 ;/* "tree " + "hex sha1" + "\n" */ pptr = &item->parents; - graft =lookup_commit_graft (&item->object.oid); + graft =lookup_commit_graft (the_repository, &item->object.oid);while (bufptr + parent_entry_len < tail && !memcmp (bufptr,"parent " ,7 )) {struct commit *new_parent;
commit.h +2 -1
@@ -176,7 +176,8 @@ typedef int (*each_commit_graft_fn)(const struct commit_graft *, void *);struct commit_graft *read_graft_line (struct strbuf *line);#define register_commit_graft (r, g, i) register_commit_graft_##r(g, i)int register_commit_graft_the_repository (struct commit_graft *,int ); -struct commit_graft *lookup_commit_graft (const struct object_id *oid); +#define lookup_commit_graft (r, o) lookup_commit_graft_##r(o) +struct commit_graft *lookup_commit_graft_the_repository (const struct object_id *oid);extern struct commit_list *get_merge_bases (struct commit *rev1,struct commit *rev2);extern struct commit_list *get_merge_bases_many (struct commit *one,int n,struct commit **twos);
fsck.c +1 -1
@@ -738,7 +738,7 @@ static int fsck_commit_buffer(struct commit *commit, const char *buffer, buffer +=41 ; parent_line_count++; } - graft =lookup_commit_graft (&commit->object.oid); + graft =lookup_commit_graft (the_repository, &commit->object.oid); parent_count =commit_list_count (commit->parents);if (graft) {if (graft->nr_parent ==-1 && !parent_count)
shallow.c +3 -2
@@ -109,7 +109,7 @@ struct commit_list *get_shallow_commits(struct object_array *heads, int depth, cur_depth++;if ((depth !=INFINITE_DEPTH && cur_depth >= depth) || (is_repository_shallow () && !commit->parents && - (graft =lookup_commit_graft (&commit->object.oid)) !=NULL && + (graft =lookup_commit_graft (the_repository, &commit->object.oid)) !=NULL && graft->nr_parent <0 )) {commit_list_insert (commit, &result); commit->object.flags |= shallow_flag;
@@ -398,7 +398,8 @@ void prepare_shallow_info(struct shallow_info *info, struct oid_array *sa)for (i =0 ; i < sa->nr; i++) {if (has_object_file (sa->oid + i)) {struct commit_graft *graft; - graft =lookup_commit_graft (&sa->oid[i]); + graft =lookup_commit_graft (the_repository, + &sa->oid[i]);if (graft && graft->nr_parent <0 )continue ; info->ours[info->nr_ours++] = i;
Signature · 1 line
2.17.0.582.gccdcbd54c44.dirty
PATCH 8/19 shallow: add repository argument to set_alternate_shallow_file
In reply to Stefan Beller--- commit.h | 3 ++- environment.c | 2 +- git.c | 2 +- shallow.c | 2 +- 4 files changed, 5 insertions(+), 4 deletions(-)
commit.h +2 -1
@@ -199,7 +199,8 @@ extern struct commit_list *get_shallow_commits(struct object_array *heads, int depth, int shallow_flag, int not_shallow_flag);extern struct commit_list *get_shallow_commits_by_rev_list (int ac,const char **av,int shallow_flag,int not_shallow_flag); -extern void set_alternate_shallow_file (const char *path,int override); +#define set_alternate_shallow_file (r, p, o) set_alternate_shallow_file_##r(p, o) +extern void set_alternate_shallow_file_the_repository (const char *path,int override);extern int write_shallow_commits (struct strbuf *out,int use_pack_protocol,const struct oid_array *extra); extern void setup_alternate_shallow(struct lock_file *shallow_lock,
environment.c +1 -1
@@ -189,7 +189,7 @@ void setup_git_env(const char *git_dir) git_namespace =expand_namespace (getenv (GIT_NAMESPACE_ENVIRONMENT )); shallow_file =getenv (GIT_SHALLOW_FILE_ENVIRONMENT );if (shallow_file) -set_alternate_shallow_file (shallow_file,0 ); +set_alternate_shallow_file (the_repository, shallow_file,0 ); }int is_bare_repository (void )
git.c +1 -1
@@ -207,7 +207,7 @@ static int handle_options(const char ***argv, int *argc, int *envchanged) }else if (!strcmp (cmd,"--shallow-file" )) { (*argv)++; (*argc)--; -set_alternate_shallow_file ((*argv)[0 ],1 ); +set_alternate_shallow_file (the_repository, (*argv)[0 ],1 );if (envchanged) *envchanged =1 ; }else if (!strcmp (cmd,"-C" )) {
shallow.c +1 -1
@@ -19,7 +19,7 @@ static int is_shallow = -1;static struct stat_validity shallow_stat;static char *alternate_shallow_file; -void set_alternate_shallow_file (const char *path,int override) +void set_alternate_shallow_file_the_repository (const char *path,int override) {if (is_shallow !=-1 )die ("BUG: is_repository_shallow must not be called before set_alternate_shallow_file" );
Signature · 1 line
2.17.0.582.gccdcbd54c44.dirty
PATCH 9/19 shallow: add repository argument to register_shallow
In reply to Stefan Beller--- builtin/pack-objects.c | 2 +- builtin/receive-pack.c | 2 +- commit.h | 3 ++- fetch-pack.c | 2 +- shallow.c | 4 ++-- upload-pack.c | 7 ++++--- 6 files changed, 11 insertions(+), 9 deletions(-)
builtin/pack-objects.c +1 -1
@@ -2875,7 +2875,7 @@ static void get_object_list(int ac, const char **av)struct object_id oid;if (get_oid_hex (line +10 , &oid))die ("not an SHA-1 '%s'" , line +10 ); -register_shallow (&oid); +register_shallow (the_repository, &oid); use_bitmap_index =0 ;continue ; }
builtin/receive-pack.c +1 -1
@@ -906,7 +906,7 @@ static int update_shallow_ref(struct command *cmd, struct shallow_info *si)* not lose these new roots.. */ for (i =0 ; i < extra.nr; i++) -register_shallow (&extra.oid[i]); +register_shallow (the_repository, &extra.oid[i]); si->shallow_ref[cmd->index] =0 ;oid_array_clear (&extra);
commit.h +2 -1
@@ -191,7 +191,8 @@ extern struct commit_list *get_merge_bases_many_dirty(struct commit *one, int n,struct oid_array ;struct ref ; -extern int register_shallow (const struct object_id *oid); +#define register_shallow (r, o) register_shallow_##r(o); +extern int register_shallow_the_repository (const struct object_id *oid);extern int unregister_shallow (const struct object_id *oid);extern int for_each_commit_graft (each_commit_graft_fn ,void *);extern int is_repository_shallow (void );
fetch-pack.c +1 -1
@@ -428,7 +428,7 @@ static int find_common(struct fetch_pack_args *args,if (skip_prefix (line,"shallow " , &arg)) {if (get_oid_hex (arg, &oid))die (_ ("invalid shallow line: %s" ), line); -register_shallow (&oid); +register_shallow (the_repository, &oid);continue ; }if (skip_prefix (line,"unshallow " , &arg)) {
shallow.c +2 -2
@@ -29,7 +29,7 @@ void set_alternate_shallow_file_the_repository(const char *path, int override) alternate_shallow_file =xstrdup_or_null (path); } -int register_shallow (const struct object_id *oid) +int register_shallow_the_repository (const struct object_id *oid) {struct commit_graft *graft =xmalloc (sizeof (struct commit_graft ));
@@ -70,7 +70,7 @@ int is_repository_shallow(void)struct object_id oid;if (get_oid_hex (buf, &oid))die ("bad shallow line: %s" , buf); -register_shallow (&oid); +register_shallow (the_repository, &oid); }fclose (fp);return is_shallow;
upload-pack.c +4 -3
@@ -663,7 +663,7 @@ static void send_shallow(struct commit_list *result)if (!(object->flags & (CLIENT_SHALLOW |NOT_SHALLOW ))) {packet_write_fmt (1 ,"shallow %s" ,oid_to_hex (&object->oid)); -register_shallow (&object->oid); +register_shallow (the_repository, &object->oid); shallow_nr++; } result = result->next;
@@ -700,7 +700,7 @@ static void send_unshallow(const struct object_array *shallows)add_object_array (object,NULL , &extra_edge_obj); }/* make sure commit traversal conforms to client */ -register_shallow (&object->oid); +register_shallow (the_repository, &object->oid); } }
@@ -912,7 +912,8 @@ static void receive_needs(void)if (shallows.nr >0 ) {int i;for (i =0 ; i < shallows.nr; i++) -register_shallow (&shallows.objects[i].item->oid); +register_shallow (the_repository, + &shallows.objects[i].item->oid); } shallow_nr += shallows.nr;
Signature · 1 line
2.17.0.582.gccdcbd54c44.dirty
PATCH 10/19 shallow: add repository argument to check_shallow_file_for_update
In reply to Stefan Beller--- shallow.c | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-)
shallow.c +4 -3
@@ -217,7 +217,8 @@ struct commit_list *get_shallow_commits_by_rev_list(int ac, const char **av,return result; } -static void check_shallow_file_for_update (void ) +#define check_shallow_file_for_update (r) check_shallow_file_for_update_##r() +static void check_shallow_file_for_update_the_repository (void ) {if (is_shallow ==-1 )die ("BUG: shallow must be initialized by now" );
@@ -319,7 +320,7 @@ void setup_alternate_shallow(struct lock_file *shallow_lock, fd =hold_lock_file_for_update (shallow_lock,git_path_shallow (),LOCK_DIE_ON_ERROR ); -check_shallow_file_for_update (); +check_shallow_file_for_update (the_repository);if (write_shallow_commits (&sb,0 , extra)) {if (write_in_full (fd, sb.buf, sb.len) <0 ) die_errno("failed to write to %s",
@@ -366,7 +367,7 @@ void prune_shallow(int show_only) } fd =hold_lock_file_for_update (&shallow_lock,git_path_shallow (),LOCK_DIE_ON_ERROR ); -check_shallow_file_for_update (); +check_shallow_file_for_update (the_repository);if (write_shallow_commits_1 (&sb,0 ,NULL ,SEEN_ONLY )) {if (write_in_full (fd, sb.buf, sb.len) <0 ) die_errno("failed to write to %s",
Signature · 1 line
2.17.0.582.gccdcbd54c44.dirty
PATCH 11/19 shallow: add repository argument to is_repository_shallow
In reply to Stefan Beller--- builtin/fetch.c | 2 +- builtin/pack-objects.c | 4 ++-- builtin/prune.c | 2 +- builtin/rev-parse.c | 3 ++- commit.c | 2 +- commit.h | 3 ++- fetch-pack.c | 4 ++-- send-pack.c | 6 +++--- shallow.c | 8 ++++---- upload-pack.c | 2 +- 10 files changed, 19 insertions(+), 17 deletions(-)
builtin/fetch.c +1 -1
@@ -1445,7 +1445,7 @@ int cmd_fetch(int argc, const char **argv, const char *prefix)if (unshallow) {if (depth)die (_ ("--depth and --unshallow cannot be used together" )); -else if (!is_repository_shallow ()) +else if (!is_repository_shallow (the_repository))die (_ ("--unshallow on a complete repository does not make sense" ));else depth =xstrfmt ("%d" ,INFINITE_DEPTH );
builtin/pack-objects.c +2 -2
@@ -2857,7 +2857,7 @@ static void get_object_list(int ac, const char **av)setup_revisions (ac, av, &revs,NULL );/* make sure shallows are read */ -is_repository_shallow (); +is_repository_shallow (the_repository);while (fgets (line,sizeof (line), stdin) !=NULL ) {int len =strlen (line);
@@ -3142,7 +3142,7 @@ int cmd_pack_objects(int argc, const char **argv, const char *prefix) use_bitmap_index = use_bitmap_index_default;/* "hard" reasons not to use bitmaps; these just won't work at all */ -if (!use_internal_rev_list || (!pack_to_stdout && write_bitmap_index) ||is_repository_shallow ()) +if (!use_internal_rev_list || (!pack_to_stdout && write_bitmap_index) ||is_repository_shallow (the_repository)) use_bitmap_index =0 ;if (pack_to_stdout || !rev_list_all)
builtin/prune.c +1 -1
@@ -160,7 +160,7 @@ int cmd_prune(int argc, const char **argv, const char *prefix)remove_temporary_files (s);free (s); -if (is_repository_shallow ()) +if (is_repository_shallow (the_repository))prune_shallow (show_only);return 0 ;
builtin/rev-parse.c +2 -1
@@ -879,7 +879,8 @@ int cmd_rev_parse(int argc, const char **argv, const char *prefix)continue ; }if (!strcmp (arg,"--is-shallow-repository" )) { -printf ("%s\n" ,is_repository_shallow () ?"true" +printf ("%s\n" , +is_repository_shallow (the_repository) ?"true" :"false" );continue ; }
commit.c +1 -1
@@ -208,7 +208,7 @@ static void prepare_commit_graft_the_repository(void) graft_file =get_graft_file ();read_graft_file (the_repository, graft_file);/* make sure shallows are read */ -is_repository_shallow (); +is_repository_shallow (the_repository); commit_graft_prepared =1 ; }
commit.h +2 -1
@@ -195,7 +195,8 @@ struct ref;extern int register_shallow_the_repository (const struct object_id *oid);extern int unregister_shallow (const struct object_id *oid);extern int for_each_commit_graft (each_commit_graft_fn ,void *); -extern int is_repository_shallow (void ); +#define is_repository_shallow (r) is_repository_shallow_##r() +extern int is_repository_shallow_the_repository (void );extern struct commit_list *get_shallow_commits (struct object_array *heads,int depth,int shallow_flag,int not_shallow_flag); extern struct commit_list *get_shallow_commits_by_rev_list(
fetch-pack.c +2 -2
@@ -397,7 +397,7 @@ static int find_common(struct fetch_pack_args *args,return 1 ; } -if (is_repository_shallow ()) +if (is_repository_shallow (the_repository))write_shallow_commits (&req_buf,1 ,NULL );if (args->depth >0 )packet_buf_write (&req_buf,"deepen %d" , args->depth);
@@ -986,7 +986,7 @@ static struct ref *do_fetch_pack(struct fetch_pack_args *args,sort_ref_list (&ref, ref_compare_name);QSORT (sought, nr_sought, cmp_ref_by_name); -if ((args->depth >0 ||is_repository_shallow ()) && !server_supports ("shallow" )) +if ((args->depth >0 ||is_repository_shallow (the_repository)) && !server_supports ("shallow" ))die (_ ("Server does not support shallow clients" ));if (args->depth >0 || args->deepen_since || args->deepen_not) args->deepen =1 ;
send-pack.c +3 -3
@@ -76,7 +76,7 @@ static int pack_objects(int fd, struct ref *refs, struct oid_array *extra, strucargv_array_push (&po.args,"-q" );if (args->progress)argv_array_push (&po.args,"--progress" ); -if (is_repository_shallow ()) +if (is_repository_shallow (the_repository))argv_array_push (&po.args,"--shallow" ); po.in =-1 ; po.out = args->stateless_rpc ?-1 : fd;
@@ -221,7 +221,7 @@ static int advertise_shallow_grafts_cb(const struct commit_graft *graft, void *cstatic void advertise_shallow_grafts_buf (struct strbuf *sb) { -if (!is_repository_shallow ()) +if (!is_repository_shallow (the_repository))return ;for_each_commit_graft (advertise_shallow_grafts_cb, sb); }
@@ -538,7 +538,7 @@ int send_pack(struct send_pack_args *args, }if (args->stateless_rpc) { -if (!args->dry_run && (cmds_sent ||is_repository_shallow ())) { +if (!args->dry_run && (cmds_sent ||is_repository_shallow (the_repository))) {packet_buf_flush (&req_buf);send_sideband (out,-1 , req_buf.buf, req_buf.len,LARGE_PACKET_MAX ); }
shallow.c +4 -4
@@ -42,7 +42,7 @@ int register_shallow_the_repository(const struct object_id *oid)return register_commit_graft (the_repository, graft,0 ); } -int is_repository_shallow (void ) +int is_repository_shallow_the_repository (void ) {FILE *fp;char buf[1024 ];
@@ -108,7 +108,7 @@ struct commit_list *get_shallow_commits(struct object_array *heads, int depth,parse_commit_or_die (commit); cur_depth++;if ((depth !=INFINITE_DEPTH && cur_depth >= depth) || - (is_repository_shallow () && !commit->parents && + (is_repository_shallow (the_repository) && !commit->parents && (graft =lookup_commit_graft (the_repository, &commit->object.oid)) !=NULL && graft->nr_parent <0 )) {commit_list_insert (commit, &result);
@@ -167,7 +167,7 @@ struct commit_list *get_shallow_commits_by_rev_list(int ac, const char **av,*/ clear_object_flags (both_flags); -is_repository_shallow ();/* make sure shallows are read */ +is_repository_shallow (the_repository);/* make sure shallows are read */ init_revisions (&revs,NULL ); save_commit_buffer =0 ;
@@ -345,7 +345,7 @@ static int advertise_shallow_grafts_cb(const struct commit_graft *graft, void *cvoid advertise_shallow_grafts (int fd) { -if (!is_repository_shallow ()) +if (!is_repository_shallow (the_repository))return ;for_each_commit_graft (advertise_shallow_grafts_cb, &fd); }
upload-pack.c +1 -1
@@ -707,7 +707,7 @@ static void send_unshallow(const struct object_array *shallows)static void deepen (int depth,int deepen_relative,struct object_array *shallows) { -if (depth ==INFINITE_DEPTH && !is_repository_shallow ()) { +if (depth ==INFINITE_DEPTH && !is_repository_shallow (the_repository)) {int i;for (i =0 ; i < shallows->nr; i++) {
Signature · 1 line
2.17.0.582.gccdcbd54c44.dirty
PATCH 12/19 commit: convert commit_graft_pos() to handle arbitrary repositories
In reply to Stefan BellerFrom: Brandon Williams <[email protected]>
--- commit.c | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-)
commit.c +3 -4
@@ -104,11 +104,10 @@ static const unsigned char *commit_graft_sha1_access(size_t index, void *table)return commit_graft_table[index]->oid.hash; } -#define commit_graft_pos (r, s) commit_graft_pos_##r(s) -static int commit_graft_pos_the_repository (const unsigned char *sha1) +static int commit_graft_pos (struct repository *r,const unsigned char *sha1) { -return sha1_pos (sha1, the_repository->parsed_objects->grafts, - the_repository->parsed_objects->grafts_nr, +return sha1_pos (sha1, r->parsed_objects->grafts, + r->parsed_objects->grafts_nr, commit_graft_sha1_access); }
Signature · 1 line
2.17.0.582.gccdcbd54c44.dirty
PATCH 13/19 commit: convert register_commit_graft to handle arbitrary repositories
In reply to Stefan BellerFrom: Brandon Williams <[email protected]>
--- commit.c | 29 +++++++++++++++-------------- commit.h | 3 +-- 2 files changed, 16 insertions(+), 16 deletions(-)
commit.c +15 -14
@@ -111,30 +111,31 @@ static int commit_graft_pos(struct repository *r, const unsigned char *sha1) commit_graft_sha1_access); } -int register_commit_graft_the_repository (struct commit_graft *graft,int ignore_dups) +int register_commit_graft (struct repository *r,struct commit_graft *graft, +int ignore_dups) { -int pos =commit_graft_pos (the_repository, graft->oid.hash); +int pos =commit_graft_pos (r, graft->oid.hash);if (0 <= pos) {if (ignore_dups)free (graft);else { -free (the_repository->parsed_objects->grafts[pos]); - the_repository->parsed_objects->grafts[pos] = graft; +free (r->parsed_objects->grafts[pos]); + r->parsed_objects->grafts[pos] = graft; }return 1 ; } pos = -pos -1 ; -ALLOC_GROW (the_repository->parsed_objects->grafts, - the_repository->parsed_objects->grafts_nr +1 , - the_repository->parsed_objects->grafts_alloc); - the_repository->parsed_objects->grafts_nr++; -if (pos < the_repository->parsed_objects->grafts_nr) -memmove (the_repository->parsed_objects->grafts + pos +1 , - the_repository->parsed_objects->grafts + pos, - (the_repository->parsed_objects->grafts_nr - pos -1 ) * -sizeof (*the_repository->parsed_objects->grafts)); - the_repository->parsed_objects->grafts[pos] = graft; +ALLOC_GROW (r->parsed_objects->grafts, + r->parsed_objects->grafts_nr +1 , + r->parsed_objects->grafts_alloc); + r->parsed_objects->grafts_nr++; +if (pos < r->parsed_objects->grafts_nr) +memmove (r->parsed_objects->grafts + pos +1 , + r->parsed_objects->grafts + pos, + (r->parsed_objects->grafts_nr - pos -1 ) * +sizeof (*r->parsed_objects->grafts)); + r->parsed_objects->grafts[pos] = graft;return 0 ; }
commit.h +1 -2
@@ -174,8 +174,7 @@ struct commit_graft {typedef int (*each_commit_graft_fn )(const struct commit_graft *,void *);struct commit_graft *read_graft_line (struct strbuf *line); -#define register_commit_graft (r, g, i) register_commit_graft_##r(g, i) -int register_commit_graft_the_repository (struct commit_graft *,int ); +int register_commit_graft (struct repository *r,struct commit_graft *,int );#define lookup_commit_graft (r, o) lookup_commit_graft_##r(o)struct commit_graft *lookup_commit_graft_the_repository (const struct object_id *oid);
Signature · 1 line
2.17.0.582.gccdcbd54c44.dirty
PATCH 14/19 commit: convert read_graft_file to handle arbitrary repositories
In reply to Stefan BellerFrom: Brandon Williams <[email protected]>
--- commit.c | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-)
commit.c +2 -3
@@ -177,8 +177,7 @@ struct commit_graft *read_graft_line(struct strbuf *line)return NULL ; } -#define read_graft_file (r, f) read_graft_file_##r(f) -static int read_graft_file_the_repository (const char *graft_file) +static int read_graft_file (struct repository *r,const char *graft_file) {FILE *fp =fopen_or_warn (graft_file,"r" );struct strbuf buf =STRBUF_INIT ;
@@ -189,7 +188,7 @@ static int read_graft_file_the_repository(const char *graft_file)struct commit_graft *graft =read_graft_line (&buf);if (!graft)continue ; -if (register_commit_graft (the_repository, graft,1 )) +if (register_commit_graft (r, graft,1 ))error ("duplicate graft data: %s" , buf.buf); }fclose (fp);
Signature · 1 line
2.17.0.582.gccdcbd54c44.dirty
PATCH 15/19 cache: convert get_graft_file to handle arbitrary repositories
In reply to Stefan Beller--- cache.h | 2 +- commit.c | 2 +- environment.c | 6 +++--- 3 files changed, 5 insertions(+), 5 deletions(-)
cache.h +1 -1
@@ -476,7 +476,7 @@ extern const char *get_git_dir(void);extern const char *get_git_common_dir (void );extern char *get_object_directory (void );extern char *get_index_file (void ); -extern char *get_graft_file (void ); +extern char *get_graft_file (struct repository *r);extern int set_git_dir (const char *path);extern int get_common_dir_noenv (struct strbuf *sb,const char *gitdir);extern int get_common_dir (struct strbuf *sb,const char *gitdir);
commit.c +1 -1
@@ -204,7 +204,7 @@ static void prepare_commit_graft_the_repository(void)if (commit_graft_prepared)return ; - graft_file =get_graft_file (); + graft_file =get_graft_file (the_repository);read_graft_file (the_repository, graft_file);/* make sure shallows are read */ is_repository_shallow (the_repository);
environment.c +3 -3
@@ -316,11 +316,11 @@ char *get_index_file(void)return the_repository->index_file; } -char *get_graft_file (void ) +char *get_graft_file (struct repository *r) { -if (!the_repository->graft_file) +if (!r->graft_file)BUG ("git environment hasn't been setup" ); -return the_repository->graft_file; +return r->graft_file; }int set_git_dir (const char *path)
Signature · 1 line
2.17.0.582.gccdcbd54c44.dirty
PATCH 16/19 path.c: migrate git_path_ to take a repository argument
In reply to Stefan Beller--- blame.c | 8 +++++--- branch.c | 14 +++++++------- builtin/commit.c | 38 +++++++++++++++++++------------------- builtin/fetch.c | 4 ++-- builtin/merge.c | 37 +++++++++++++++++++------------------ builtin/pull.c | 4 ++-- builtin/reset.c | 2 +- fetch-pack.c | 2 +- path.c | 18 +++++++++--------- path.h | 40 +++++++++++++++++++++++++++++++--------- repository.h | 5 +++++ rerere.c | 7 ++++--- sequencer.c | 37 +++++++++++++++++++------------------ shallow.c | 12 +++++++----- wt-status.c | 8 ++++---- 15 files changed, 135 insertions(+), 101 deletions(-)
blame.c +5 -3
@@ -112,17 +112,19 @@ static void append_merge_parents(struct commit_list **tail)int merge_head;struct strbuf line =STRBUF_INIT ; - merge_head =open (git_path_merge_head (),O_RDONLY ); + merge_head =open (git_path_merge_head (the_repository),O_RDONLY );if (merge_head <0 ) {if (errno ==ENOENT )return ; -die ("cannot open '%s' for reading" ,git_path_merge_head ()); +die ("cannot open '%s' for reading" , +git_path_merge_head (the_repository)); }while (!strbuf_getwholeline_fd (&line, merge_head,'\n' )) {struct object_id oid;if (line.len <GIT_SHA1_HEXSZ ||get_oid_hex (line.buf, &oid)) -die ("unknown line in '%s': %s" ,git_path_merge_head (), line.buf); +die ("unknown line in '%s': %s" , +git_path_merge_head (the_repository), line.buf); tail =append_parent (tail, &oid); }close (merge_head);
branch.c +7 -7
@@ -339,13 +339,13 @@ void create_branch(const char *name, const char *start_name,void remove_branch_state (void ) { -unlink (git_path_cherry_pick_head ()); -unlink (git_path_revert_head ()); -unlink (git_path_merge_head ()); -unlink (git_path_merge_rr ()); -unlink (git_path_merge_msg ()); -unlink (git_path_merge_mode ()); -unlink (git_path_squash_msg ()); +unlink (git_path_cherry_pick_head (the_repository)); +unlink (git_path_revert_head (the_repository)); +unlink (git_path_merge_head (the_repository)); +unlink (git_path_merge_rr (the_repository)); +unlink (git_path_merge_msg (the_repository)); +unlink (git_path_merge_mode (the_repository)); +unlink (git_path_squash_msg (the_repository)); }void die_if_checked_out (const char *branch,int ignore_current_worktree)
builtin/commit.c +19 -19
@@ -145,9 +145,9 @@ static int opt_parse_m(const struct option *opt, const char *arg, int unset)static void determine_whence (struct wt_status *s) { -if (file_exists (git_path_merge_head ())) +if (file_exists (git_path_merge_head (the_repository))) whence =FROM_MERGE ; -else if (file_exists (git_path_cherry_pick_head ())) { +else if (file_exists (git_path_cherry_pick_head (the_repository))) { whence =FROM_CHERRY_PICK ;if (file_exists (git_path_seq_dir ())) sequencer_in_use =1 ;
@@ -696,21 +696,21 @@ static int prepare_to_commit(const char *index_file, const char *prefix,if (have_option_m)strbuf_addbuf (&sb, &message); hook_arg1 ="message" ; - }else if (!stat (git_path_merge_msg (), &statbuf)) { + }else if (!stat (git_path_merge_msg (the_repository), &statbuf)) {/* * prepend SQUASH_MSG here if it exists and a * "merge --squash" was originally performed */ -if (!stat (git_path_squash_msg (), &statbuf)) { -if (strbuf_read_file (&sb,git_path_squash_msg (),0 ) <0 ) +if (!stat (git_path_squash_msg (the_repository), &statbuf)) { +if (strbuf_read_file (&sb,git_path_squash_msg (the_repository),0 ) <0 )die_errno (_ ("could not read SQUASH_MSG" )); hook_arg1 ="squash" ; }else hook_arg1 ="merge" ; -if (strbuf_read_file (&sb,git_path_merge_msg (),0 ) <0 ) +if (strbuf_read_file (&sb,git_path_merge_msg (the_repository),0 ) <0 )die_errno (_ ("could not read MERGE_MSG" )); - }else if (!stat (git_path_squash_msg (), &statbuf)) { -if (strbuf_read_file (&sb,git_path_squash_msg (),0 ) <0 ) + }else if (!stat (git_path_squash_msg (the_repository), &statbuf)) { +if (strbuf_read_file (&sb,git_path_squash_msg (the_repository),0 ) <0 )die_errno (_ ("could not read SQUASH_MSG" )); hook_arg1 ="squash" ; }else if (template_file) {
@@ -791,8 +791,8 @@ static int prepare_to_commit(const char *index_file, const char *prefix," %s\n" "and try again.\n"), whence ==FROM_MERGE ? -git_path_merge_head () : - git_path_cherry_pick_head()); +git_path_merge_head (the_repository) : + git_path_cherry_pick_head(the_repository)); }fprintf (s->fp,"\n" );
@@ -1523,7 +1523,7 @@ int cmd_commit(int argc, const char **argv, const char *prefix)if (!reflog_msg) reflog_msg ="commit (merge)" ; pptr =commit_list_append (current_head, pptr); - fp =xfopen (git_path_merge_head (),"r" ); + fp =xfopen (git_path_merge_head (the_repository),"r" );while (strbuf_getline_lf (&m, fp) !=EOF ) {struct commit *parent;
@@ -1534,8 +1534,8 @@ int cmd_commit(int argc, const char **argv, const char *prefix) }fclose (fp);strbuf_release (&m); -if (!stat (git_path_merge_mode (), &statbuf)) { -if (strbuf_read_file (&sb,git_path_merge_mode (),0 ) <0 ) +if (!stat (git_path_merge_mode (the_repository), &statbuf)) { +if (strbuf_read_file (&sb,git_path_merge_mode (the_repository),0 ) <0 )die_errno (_ ("could not read MERGE_MODE" ));if (!strcmp (sb.buf,"no-ff" )) allow_fast_forward =0 ;
@@ -1598,12 +1598,12 @@ int cmd_commit(int argc, const char **argv, const char *prefix)die ("%s" , err.buf); } -unlink (git_path_cherry_pick_head ()); -unlink (git_path_revert_head ()); -unlink (git_path_merge_head ()); -unlink (git_path_merge_msg ()); -unlink (git_path_merge_mode ()); -unlink (git_path_squash_msg ()); +unlink (git_path_cherry_pick_head (the_repository)); +unlink (git_path_revert_head (the_repository)); +unlink (git_path_merge_head (the_repository)); +unlink (git_path_merge_msg (the_repository)); +unlink (git_path_merge_mode (the_repository)); +unlink (git_path_squash_msg (the_repository));if (commit_index_files ()) die (_("Repository has been updated, but unable to write\n"
builtin/fetch.c +2 -2
@@ -767,7 +767,7 @@ static int store_updated_refs(const char *raw_url, const char *remote_name,const char *what, *kind;struct ref *rm;char *url; -const char *filename = dry_run ?"/dev/null" :git_path_fetch_head (); +const char *filename = dry_run ?"/dev/null" :git_path_fetch_head (the_repository);int want_status;int summary_width =transport_summary_width (ref_map);
@@ -1019,7 +1019,7 @@ static void check_not_current_branch(struct ref *ref_map)static int truncate_fetch_head (void ) { -const char *filename =git_path_fetch_head (); +const char *filename =git_path_fetch_head (the_repository);FILE *fp =fopen_for_writing (filename);if (!fp)
builtin/merge.c +19 -18
@@ -245,9 +245,9 @@ static struct option builtin_merge_options[] = {/* Cleans up metadata that is uninteresting after a succeeded merge. */ static void drop_save (void ) { -unlink (git_path_merge_head ()); -unlink (git_path_merge_msg ()); -unlink (git_path_merge_mode ()); +unlink (git_path_merge_head (the_repository)); +unlink (git_path_merge_msg (the_repository)); +unlink (git_path_merge_mode (the_repository)); }static int save_state (struct object_id *stash)
@@ -380,7 +380,7 @@ static void squash_message(struct commit *commit, struct commit_list *remotehead oid_to_hex(&commit->object.oid));pretty_print_commit (&ctx, commit, &out); } -write_file_buf (git_path_squash_msg (), out.buf, out.len); +write_file_buf (git_path_squash_msg (the_repository), out.buf, out.len);strbuf_release (&out); }
@@ -741,7 +741,7 @@ static void add_strategies(const char *string, unsigned attr)static void read_merge_msg (struct strbuf *msg) { -const char *filename =git_path_merge_msg (); +const char *filename =git_path_merge_msg (the_repository);strbuf_reset (msg);if (strbuf_read_file (msg, filename,0 ) <0 )die_errno (_ ("Could not read from '%s'" ), filename);
@@ -778,18 +778,18 @@ static void prepare_to_commit(struct commit_list *remoteheads)if (signoff)append_signoff (&msg,ignore_non_trailer (msg.buf, msg.len),0 );write_merge_heads (remoteheads); -write_file_buf (git_path_merge_msg (), msg.buf, msg.len); +write_file_buf (git_path_merge_msg (the_repository), msg.buf, msg.len);if (run_commit_hook (0 < option_edit,get_index_file (),"prepare-commit-msg" , -git_path_merge_msg (),"merge" ,NULL )) +git_path_merge_msg (the_repository),"merge" ,NULL ))abort_commit (remoteheads,NULL );if (0 < option_edit) { -if (launch_editor (git_path_merge_msg (),NULL ,NULL )) +if (launch_editor (git_path_merge_msg (the_repository),NULL ,NULL ))abort_commit (remoteheads,NULL ); }if (verify_msg &&run_commit_hook (0 < option_edit,get_index_file (),"commit-msg" , -git_path_merge_msg (),NULL )) +git_path_merge_msg (the_repository),NULL ))abort_commit (remoteheads,NULL );read_merge_msg (&msg);
@@ -859,7 +859,7 @@ static int suggest_conflicts(void)FILE *fp;struct strbuf msgbuf =STRBUF_INIT ; - filename =git_path_merge_msg (); + filename =git_path_merge_msg (the_repository); fp =xfopen (filename,"a" );append_conflicts_hint (&msgbuf);
@@ -939,12 +939,12 @@ static void write_merge_heads(struct commit_list *remoteheads) }strbuf_addf (&buf,"%s\n" ,oid_to_hex (oid)); } -write_file_buf (git_path_merge_head (), buf.buf, buf.len); +write_file_buf (git_path_merge_head (the_repository), buf.buf, buf.len);strbuf_reset (&buf);if (fast_forward ==FF_NO )strbuf_addstr (&buf,"no-ff" ); -write_file_buf (git_path_merge_mode (), buf.buf, buf.len); +write_file_buf (git_path_merge_mode (the_repository), buf.buf, buf.len);strbuf_release (&buf); }
@@ -952,7 +952,8 @@ static void write_merge_state(struct commit_list *remoteheads) {write_merge_heads (remoteheads);strbuf_addch (&merge_msg,'\n' ); -write_file_buf (git_path_merge_msg (), merge_msg.buf, merge_msg.len); +write_file_buf (git_path_merge_msg (the_repository), merge_msg.buf, + merge_msg.len); }static int default_edit_option (void )
@@ -1035,7 +1036,7 @@ static void handle_fetch_head(struct commit_list **remotes, struct strbuf *mergeif (!merge_names) merge_names = &fetch_head_file; - filename =git_path_fetch_head (); + filename =git_path_fetch_head (the_repository); fd =open (filename,O_RDONLY );if (fd <0 )die_errno (_ ("could not open '%s' for reading" ), filename);
@@ -1209,7 +1210,7 @@ int cmd_merge(int argc, const char **argv, const char *prefix)usage_msg_opt (_ ("--abort expects no arguments" ), builtin_merge_usage, builtin_merge_options); -if (!file_exists (git_path_merge_head ())) +if (!file_exists (git_path_merge_head (the_repository)))die (_ ("There is no merge to abort (MERGE_HEAD missing)." ));/* Invoke 'git reset --merge' */
@@ -1225,7 +1226,7 @@ int cmd_merge(int argc, const char **argv, const char *prefix)usage_msg_opt (_ ("--continue expects no arguments" ), builtin_merge_usage, builtin_merge_options); -if (!file_exists (git_path_merge_head ())) +if (!file_exists (git_path_merge_head (the_repository)))die (_ ("There is no merge in progress (MERGE_HEAD missing)." ));/* Invoke 'git commit' */
@@ -1236,7 +1237,7 @@ int cmd_merge(int argc, const char **argv, const char *prefix)if (read_cache_unmerged ())die_resolve_conflict ("merge" ); -if (file_exists (git_path_merge_head ())) { +if (file_exists (git_path_merge_head (the_repository))) {/* * There is no unmerged entry, don't advise 'git * add/rm <file>', just 'git commit'.
@@ -1247,7 +1248,7 @@ int cmd_merge(int argc, const char **argv, const char *prefix)else die (_ ("You have not concluded your merge (MERGE_HEAD exists)." )); } -if (file_exists (git_path_cherry_pick_head ())) { +if (file_exists (git_path_cherry_pick_head (the_repository))) {if (advice_resolve_conflict)die (_ ("You have not concluded your cherry-pick (CHERRY_PICK_HEAD exists).\n" "Please, commit your changes before you merge." ));
builtin/pull.c +2 -2
@@ -351,7 +351,7 @@ static int git_pull_config(const char *var, const char *value, void *cb)*/ static void get_merge_heads (struct oid_array *merge_heads) { -const char *filename =git_path_fetch_head (); +const char *filename =git_path_fetch_head (the_repository);FILE *fp;struct strbuf sb =STRBUF_INIT ;struct object_id oid;
@@ -857,7 +857,7 @@ int cmd_pull(int argc, const char **argv, const char *prefix)if (read_cache_unmerged ())die_resolve_conflict ("pull" ); -if (file_exists (git_path_merge_head ())) +if (file_exists (git_path_merge_head (the_repository)))die_conclude_merge ();if (get_oid ("HEAD" , &orig_head))
builtin/reset.c +1 -1
@@ -39,7 +39,7 @@ static const char *reset_type_names[] = {static inline int is_merge (void ) { -return !access (git_path_merge_head (),F_OK ); +return !access (git_path_merge_head (the_repository),F_OK ); }static int reset_index (const struct object_id *oid,int reset_type,int quiet)
fetch-pack.c +1 -1
@@ -1136,7 +1136,7 @@ static void update_shallow(struct fetch_pack_args *args,if (args->deepen && alternate_shallow_file) {if (*alternate_shallow_file =='\0' ) {/* --unshallow */ -unlink_or_warn (git_path_shallow ()); +unlink_or_warn (git_path_shallow (the_repository));rollback_lock_file (&shallow_lock); }else commit_lock_file (&shallow_lock);
path.c +9 -9
@@ -1358,12 +1358,12 @@ char *xdg_cache_home(const char *filename)return NULL ; } -GIT_PATH_FUNC(git_path_cherry_pick_head, "CHERRY_PICK_HEAD") -GIT_PATH_FUNC(git_path_revert_head, "REVERT_HEAD") -GIT_PATH_FUNC(git_path_squash_msg, "SQUASH_MSG") -GIT_PATH_FUNC(git_path_merge_msg, "MERGE_MSG") -GIT_PATH_FUNC(git_path_merge_rr, "MERGE_RR") -GIT_PATH_FUNC(git_path_merge_mode, "MERGE_MODE") -GIT_PATH_FUNC(git_path_merge_head, "MERGE_HEAD") -GIT_PATH_FUNC(git_path_fetch_head, "FETCH_HEAD") -GIT_PATH_FUNC (git_path_shallow,"shallow" ) +REPO_GIT_PATH_FUNC(path_cherry_pick_head, "CHERRY_PICK_HEAD") +REPO_GIT_PATH_FUNC(path_revert_head, "REVERT_HEAD") +REPO_GIT_PATH_FUNC(path_squash_msg, "SQUASH_MSG") +REPO_GIT_PATH_FUNC(path_merge_msg, "MERGE_MSG") +REPO_GIT_PATH_FUNC(path_merge_rr, "MERGE_RR") +REPO_GIT_PATH_FUNC(path_merge_mode, "MERGE_MODE") +REPO_GIT_PATH_FUNC(path_merge_head, "MERGE_HEAD") +REPO_GIT_PATH_FUNC(path_fetch_head, "FETCH_HEAD") +REPO_GIT_PATH_FUNC (path_shallow,"shallow" )
path.h +31 -9
@@ -160,14 +160,36 @@ extern void report_linked_checkout_garbage(void);return ret; \ } -const char *git_path_cherry_pick_head (void ); -const char *git_path_revert_head (void ); -const char *git_path_squash_msg (void ); -const char *git_path_merge_msg (void ); -const char *git_path_merge_rr (void ); -const char *git_path_merge_mode (void ); -const char *git_path_merge_head (void ); -const char *git_path_fetch_head (void ); -const char *git_path_shallow (void ); +#define REPO_GIT_PATH_FUNC (var, filename) \ + const char *git_##var(struct repository *r) \ + { \ + if (!r->cached_paths.var) \ + r->cached_paths.var = git_pathdup(filename); \ + return r->cached_paths.var; \ + } + +struct path_cache { +const char *path_cherry_pick_head; +const char *path_revert_head; +const char *path_squash_msg; +const char *path_merge_msg; +const char *path_merge_rr; +const char *path_merge_mode; +const char *path_merge_head; +const char *path_fetch_head; +const char *path_shallow; +}; + +#define PATH_CACHE_INIT { NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL } + +const char *git_path_cherry_pick_head (struct repository *r); +const char *git_path_revert_head (struct repository *r); +const char *git_path_squash_msg (struct repository *r); +const char *git_path_merge_msg (struct repository *r); +const char *git_path_merge_rr (struct repository *r); +const char *git_path_merge_mode (struct repository *r); +const char *git_path_merge_head (struct repository *r); +const char *git_path_fetch_head (struct repository *r); +const char *git_path_shallow (struct repository *r);#endif /* PATH_H */
repository.h +5 -0
@@ -38,6 +38,11 @@ struct repository {/* The store in which the refs are held. */ struct ref_store *refs; +/* +* Contains path to often used file names. +*/ +struct path_cache cached_paths; +/* * Path to the repository's graft file. * Cannot be NULL after initialization.
rerere.c +4 -3
@@ -201,7 +201,7 @@ static struct rerere_id *new_rerere_id(unsigned char *sha1)static void read_rr (struct string_list *rr) {struct strbuf buf =STRBUF_INIT ; -FILE *in =fopen_or_warn (git_path_merge_rr (),"r" ); +FILE *in =fopen_or_warn (git_path_merge_rr (the_repository),"r" );if (!in)return ;
@@ -897,7 +897,8 @@ int setup_rerere(struct string_list *merge_rr, int flags)if (flags &RERERE_READONLY ) fd =0 ;else - fd =hold_lock_file_for_update (&write_lock,git_path_merge_rr (), + fd =hold_lock_file_for_update (&write_lock, +git_path_merge_rr (the_repository),LOCK_DIE_ON_ERROR );read_rr (merge_rr);return fd;
@@ -1247,6 +1248,6 @@ void rerere_clear(struct string_list *merge_rr)rmdir (rerere_path (id,NULL )); } } -unlink_or_warn (git_path_merge_rr ()); +unlink_or_warn (git_path_merge_rr (the_repository));rollback_lock_file (&write_lock); }
sequencer.c +19 -18
@@ -322,7 +322,7 @@ static void print_advice(int show_hint, struct replay_opts *opts)* (typically rebase --interactive) wants to take care * of the commit itself so remove CHERRY_PICK_HEAD */ -unlink (git_path_cherry_pick_head ()); +unlink (git_path_cherry_pick_head (the_repository));return ; }
@@ -1191,8 +1191,8 @@ static int do_commit(const char *msg_file, const char *author, &oid);strbuf_release (&sb);if (!res) { -unlink (git_path_cherry_pick_head ()); -unlink (git_path_merge_msg ()); +unlink (git_path_cherry_pick_head (the_repository)); +unlink (git_path_merge_msg (the_repository));if (!is_rebase_i (opts))print_commit_summary (NULL , &oid,SUMMARY_SHOW_AUTHOR_DATE );
@@ -1459,7 +1459,7 @@ static int do_pick_commit(enum todo_command command, struct commit *commit, struct replay_opts *opts, int final_fixup) {unsigned int flags = opts->edit ?EDIT_MSG :0 ; -const char *msg_file = opts->edit ?NULL :git_path_merge_msg (); +const char *msg_file = opts->edit ?NULL :git_path_merge_msg (the_repository);struct object_id head;struct commit *base, *next, *parent;const char *base_label, *next_label;
@@ -1594,12 +1594,12 @@ static int do_pick_commit(enum todo_command command, struct commit *commit, flags |=CLEANUP_MSG ; msg_file =rebase_path_fixup_msg (); }else { -const char *dest =git_path_squash_msg (); +const char *dest =git_path_squash_msg (the_repository);unlink (dest);if (copy_file (dest,rebase_path_squash_msg (),0666 ))return error (_ ("could not rename '%s' to '%s'" ),rebase_path_squash_msg (), dest); -unlink (git_path_merge_msg ()); +unlink (git_path_merge_msg (the_repository)); msg_file = dest; flags |=EDIT_MSG ; }
@@ -1616,13 +1616,13 @@ static int do_pick_commit(enum todo_command command, struct commit *commit,if (res <0 )return res; res |=write_message (msgbuf.buf, msgbuf.len, -git_path_merge_msg (),0 ); +git_path_merge_msg (the_repository),0 ); }else {struct commit_list *common =NULL ;struct commit_list *remotes =NULL ; res =write_message (msgbuf.buf, msgbuf.len, -git_path_merge_msg (),0 ); +git_path_merge_msg (the_repository),0 );commit_list_insert (base, &common);commit_list_insert (next, &remotes);
@@ -2168,8 +2168,8 @@ static int rollback_single_pick(void) {struct object_id head_oid; -if (!file_exists (git_path_cherry_pick_head ()) && - !file_exists (git_path_revert_head ())) +if (!file_exists (git_path_cherry_pick_head (the_repository)) && + !file_exists (git_path_revert_head (the_repository)))return error (_ ("no cherry-pick or revert in progress" ));if (read_ref_full ("HEAD" ,0 , &head_oid,NULL ))return error (_ ("cannot resolve HEAD" ));
@@ -2397,10 +2397,11 @@ static int error_failed_squash(struct commit *commit,return error (_ ("could not rename '%s' to '%s'" ),rebase_path_squash_msg (),rebase_path_message ());unlink (rebase_path_fixup_msg ()); -unlink (git_path_merge_msg ()); -if (copy_file (git_path_merge_msg (),rebase_path_message (),0666 )) +unlink (git_path_merge_msg (the_repository)); +if (copy_file (git_path_merge_msg (the_repository),rebase_path_message (),0666 ))return error (_ ("could not copy '%s' to '%s'" ), -rebase_path_message (),git_path_merge_msg ()); +rebase_path_message (), +git_path_merge_msg (the_repository));return error_with_patch (commit, subject, subject_len, opts,1 ,0 ); }
@@ -2756,8 +2757,8 @@ static int continue_single_pick(void) {const char *argv[] = {"commit" ,NULL }; -if (!file_exists (git_path_cherry_pick_head ()) && - !file_exists (git_path_revert_head ())) +if (!file_exists (git_path_cherry_pick_head (the_repository)) && + !file_exists (git_path_revert_head (the_repository)))return error (_ ("no cherry-pick or revert in progress" ));return run_command_v_opt (argv,RUN_GIT_CMD ); }
@@ -2769,7 +2770,7 @@ static int commit_staged_changes(struct replay_opts *opts)if (has_unstaged_changes (1 ))return error (_ ("cannot rebase: You have unstaged changes." ));if (!has_uncommitted_changes (0 )) { -const char *cherry_pick_head =git_path_cherry_pick_head (); +const char *cherry_pick_head =git_path_cherry_pick_head (the_repository);if (file_exists (cherry_pick_head) &&unlink (cherry_pick_head))return error (_ ("could not remove CHERRY_PICK_HEAD" ));
@@ -2823,8 +2824,8 @@ int sequencer_continue(struct replay_opts *opts)if (!is_rebase_i (opts)) {/* Verify that the conflict has been resolved */ -if (file_exists (git_path_cherry_pick_head ()) || -file_exists (git_path_revert_head ())) { +if (file_exists (git_path_cherry_pick_head (the_repository)) || +file_exists (git_path_revert_head (the_repository))) { res =continue_single_pick ();if (res) goto release_todo_list;
shallow.c +7 -5
@@ -52,7 +52,7 @@ int is_repository_shallow_the_repository(void)return is_shallow;if (!path) - path =git_path_shallow (); + path =git_path_shallow (the_repository);/* * fetch-pack sets '--shallow-file ""' as an indicator that no * shallow file should be used. We could just open it and it
@@ -223,7 +223,7 @@ static void check_shallow_file_for_update_the_repository(void)if (is_shallow ==-1 )die ("BUG: shallow must be initialized by now" ); -if (!stat_validity_check (&shallow_stat,git_path_shallow ())) +if (!stat_validity_check (&shallow_stat,git_path_shallow (the_repository)))die ("shallow file has changed since we read it" ); }
@@ -318,7 +318,8 @@ void setup_alternate_shallow(struct lock_file *shallow_lock,struct strbuf sb =STRBUF_INIT ;int fd; - fd =hold_lock_file_for_update (shallow_lock,git_path_shallow (), + fd =hold_lock_file_for_update (shallow_lock, +git_path_shallow (the_repository),LOCK_DIE_ON_ERROR );check_shallow_file_for_update (the_repository);if (write_shallow_commits (&sb,0 , extra)) {
@@ -365,7 +366,8 @@ void prune_shallow(int show_only)strbuf_release (&sb);return ; } - fd =hold_lock_file_for_update (&shallow_lock,git_path_shallow (), + fd =hold_lock_file_for_update (&shallow_lock, +git_path_shallow (the_repository),LOCK_DIE_ON_ERROR );check_shallow_file_for_update (the_repository);if (write_shallow_commits_1 (&sb,0 ,NULL ,SEEN_ONLY )) {
@@ -374,7 +376,7 @@ void prune_shallow(int show_only) get_lock_file_path(&shallow_lock));commit_lock_file (&shallow_lock); }else { -unlink (git_path_shallow ()); +unlink (git_path_shallow (the_repository));rollback_lock_file (&shallow_lock); }strbuf_release (&sb);
wt-status.c +4 -4
@@ -1309,7 +1309,7 @@ static void show_rebase_in_progress(struct wt_status *s,status_printf_ln (s, color,_ (" (use \"git rebase --abort\" to check out the original branch)" )); } - }else if (state->rebase_in_progress || !stat (git_path_merge_msg (), &st)) { + }else if (state->rebase_in_progress || !stat (git_path_merge_msg (the_repository), &st)) {print_rebase_state (s, state, color);if (s->hints) status_printf_ln(s, color,
@@ -1544,17 +1544,17 @@ void wt_status_get_state(struct wt_status_state *state,struct stat st;struct object_id oid; -if (!stat (git_path_merge_head (), &st)) { +if (!stat (git_path_merge_head (the_repository), &st)) { state->merge_in_progress =1 ; }else if (wt_status_check_rebase (NULL , state)) { ;/* all set */ - }else if (!stat (git_path_cherry_pick_head (), &st) && + }else if (!stat (git_path_cherry_pick_head (the_repository), &st) && !get_oid ("CHERRY_PICK_HEAD" , &oid)) { state->cherry_pick_in_progress =1 ;oidcpy (&state->cherry_pick_head_oid, &oid); }wt_status_check_bisect (NULL , state); -if (!stat (git_path_revert_head (), &st) && +if (!stat (git_path_revert_head (the_repository), &st) && !get_oid ("REVERT_HEAD" , &oid)) { state->revert_in_progress =1 ;oidcpy (&state->revert_head_oid, &oid);
Signature · 1 line
2.17.0.582.gccdcbd54c44.dirty
PATCH 17/19 shallow: migrate shallow information into the object parser
In reply to Stefan Beller--- commit.h | 9 +++------ object.c | 3 +++ object.h | 4 ++++ shallow.c | 50 ++++++++++++++++++++++++-------------------------- 4 files changed, 34 insertions(+), 32 deletions(-)
commit.h +3 -6
@@ -190,18 +190,15 @@ extern struct commit_list *get_merge_bases_many_dirty(struct commit *one, int n,struct oid_array ;struct ref ; -#define register_shallow (r, o) register_shallow_##r(o); -extern int register_shallow_the_repository (const struct object_id *oid); +extern int register_shallow (struct repository *r,const struct object_id *oid);extern int unregister_shallow (const struct object_id *oid);extern int for_each_commit_graft (each_commit_graft_fn ,void *); -#define is_repository_shallow (r) is_repository_shallow_##r() -extern int is_repository_shallow_the_repository (void ); +extern int is_repository_shallow (struct repository *r);extern struct commit_list *get_shallow_commits (struct object_array *heads,int depth,int shallow_flag,int not_shallow_flag);extern struct commit_list *get_shallow_commits_by_rev_list (int ac,const char **av,int shallow_flag,int not_shallow_flag); -#define set_alternate_shallow_file (r, p, o) set_alternate_shallow_file_##r(p, o) -extern void set_alternate_shallow_file_the_repository (const char *path,int override); +extern void set_alternate_shallow_file (struct repository *r,const char *path,int override);extern int write_shallow_commits (struct strbuf *out,int use_pack_protocol,const struct oid_array *extra); extern void setup_alternate_shallow(struct lock_file *shallow_lock,
object.c +3 -0
@@ -464,6 +464,9 @@ struct parsed_object_pool *parsed_object_pool_new(void) o->tag_state =allocate_alloc_state (); o->object_state =allocate_alloc_state (); + o->is_shallow =-1 ; + o->shallow_stat =xcalloc (1 ,sizeof (*o->shallow_stat)); +return o; }
object.h +4 -0
@@ -16,6 +16,10 @@ struct parsed_object_pool {/* parent substitutions from .git/info/grafts and .git/shallow */ struct commit_graft **grafts;int grafts_alloc, grafts_nr; + +int is_shallow; +struct stat_validity *shallow_stat; +char *alternate_shallow_file; };struct parsed_object_pool *parsed_object_pool_new (void );
shallow.c +24 -26
100 lines not on this page · raw message
Signature · 1 line
2.17.0.582.gccdcbd54c44.dirty
PATCH 18/19 commit: allow prepare_commit_graft to handle arbitrary repositories
In reply to Stefan Beller--- commit.c | 14 ++++++-------- object.h | 2 ++ 2 files changed, 8 insertions(+), 8 deletions(-)
commit.c +6 -8
@@ -196,19 +196,17 @@ static int read_graft_file(struct repository *r, const char *graft_file)return 0 ; } -#define prepare_commit_graft (r) prepare_commit_graft_##r() -static void prepare_commit_graft_the_repository (void ) +static void prepare_commit_graft (struct repository *r) { -static int commit_graft_prepared;char *graft_file; -if (commit_graft_prepared) +if (r->parsed_objects->commit_graft_prepared)return ; - graft_file =get_graft_file (the_repository); -read_graft_file (the_repository, graft_file); + graft_file =get_graft_file (r); +read_graft_file (r, graft_file);/* make sure shallows are read */ -is_repository_shallow (the_repository); - commit_graft_prepared =1 ; +is_repository_shallow (r); + r->parsed_objects->commit_graft_prepared =1 ; }struct commit_graft *lookup_commit_graft_the_repository (const struct object_id *oid)
object.h +2 -0
@@ -20,6 +20,8 @@ struct parsed_object_pool {int is_shallow;struct stat_validity *shallow_stat;char *alternate_shallow_file; + +int commit_graft_prepared; };struct parsed_object_pool *parsed_object_pool_new (void );
Signature · 1 line
2.17.0.582.gccdcbd54c44.dirty
PATCH 19/19 commit: allow lookup_commit_graft to handle arbitrary repositories
In reply to Stefan Beller--- commit.c | 8 ++++---- commit.h | 3 +-- 2 files changed, 5 insertions(+), 6 deletions(-)
commit.c +4 -4
@@ -209,14 +209,14 @@ static void prepare_commit_graft(struct repository *r) r->parsed_objects->commit_graft_prepared =1 ; } -struct commit_graft *lookup_commit_graft_the_repository (const struct object_id *oid) +struct commit_graft *lookup_commit_graft (struct repository *r,const struct object_id *oid) {int pos; -prepare_commit_graft (the_repository); - pos =commit_graft_pos (the_repository, oid->hash); +prepare_commit_graft (r); + pos =commit_graft_pos (r, oid->hash);if (pos <0 )return NULL ; -return the_repository->parsed_objects->grafts[pos]; +return r->parsed_objects->grafts[pos]; }int for_each_commit_graft (each_commit_graft_fn fn,void *cb_data)
commit.h +1 -2
@@ -175,8 +175,7 @@ typedef int (*each_commit_graft_fn)(const struct commit_graft *, void *);struct commit_graft *read_graft_line (struct strbuf *line);int register_commit_graft (struct repository *r,struct commit_graft *,int ); -#define lookup_commit_graft (r, o) lookup_commit_graft_##r(o) -struct commit_graft *lookup_commit_graft_the_repository (const struct object_id *oid); +struct commit_graft *lookup_commit_graft (struct repository *r,const struct object_id *oid);extern struct commit_list *get_merge_bases (struct commit *rev1,struct commit *rev2);extern struct commit_list *get_merge_bases_many (struct commit *one,int n,struct commit **twos);
Signature · 1 line
2.17.0.582.gccdcbd54c44.dirty
cover object store: grafts and shallow.
In reply to Stefan Bellerv1:
This reroll:
* includes the fixup by Ramsay
http://public-inbox.org/git/[email protected]
* fixes commit messages
* changes the macro for the global git_path definitions such that we need fewer characters (omits the duplicates "path_" that were the same for every function)
* the range diff is below
(per https://public-inbox.org/git/[email protected]/)
Thanks,
Stefan
v0/RFC:
This applies on top of sb/object-store-alloc[1], and is the next part of the object store series.
I think we're getting close to actually being done in the object store series, as the next series to build on top of this will convert the lookup_{object, commit, ...} functions.
However I marked this series as RFC, as I expect heavy conflicts with the code base. sb/object-store-alloc builds on an older base of the code base and there have been some series that will conflict with this one. For example the patch to migrate path functions into a repository world will collide with one of Dschos series as he added another path helper function there. I am happy to reroll on top of that, but for now I chose sb/object-store-alloc to keep the momentum in the object-store series'.
There is another object store series that is not part of the critical path:
There is a mem leak in the pack files stored in the raw object store. Upon free'ing the repository we do not free its pack files. We cannot free the packfiles, as otherwise the bitmap code would have dangling pointers into packfiles that no longer exists, leading to segfaults. So we'll need to have an object store series covering the bitmap code. I have something local, which I'll send out shortly.
Thanks,
Stefan
[1] with the latest patch replaced as in
https://public-inbox.org/git/[email protected]/
Brandon Williams (3):
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 (6):
object: move grafts to object parser
commit: add repository argument to commit_graft_pos
commit: add repository argument to register_commit_graft
commit: add repository argument to read_graft_file
commit: add repository argument to prepare_commit_graft
commit: add repository argument to lookup_commit_graft
Stefan Beller (10):
object-store: move object access functions to object-store.h
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
cache: convert get_graft_file to handle arbitrary repositories path.c: migrate global git_path_* to take a repository argument
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
apply.c | 1 + archive-tar.c | 1 + archive-zip.c | 1 + archive.c | 1 + blame.c | 9 ++- branch.c | 14 ++--- builtin/blame.c | 4 +- builtin/cat-file.c | 1 + builtin/checkout.c | 1 + builtin/clone.c | 1 + builtin/commit-tree.c | 1 + builtin/commit.c | 38 ++++++------- builtin/describe.c | 1 + builtin/difftool.c | 1 + builtin/fast-export.c | 1 + builtin/fetch.c | 7 ++- builtin/fmt-merge-msg.c | 1 + builtin/hash-object.c | 1 + builtin/log.c | 1 + builtin/ls-tree.c | 1 + builtin/merge-tree.c | 1 + builtin/merge.c | 37 ++++++------ builtin/mktag.c | 1 + builtin/mktree.c | 1 + builtin/notes.c | 1 + builtin/pack-objects.c | 6 +- builtin/prune.c | 3 +- builtin/pull.c | 4 +- builtin/receive-pack.c | 3 +- builtin/reflog.c | 1 + builtin/remote.c | 1 + builtin/reset.c | 2 +- builtin/rev-list.c | 1 + builtin/rev-parse.c | 3 +- builtin/show-ref.c | 1 + builtin/tag.c | 1 + builtin/unpack-file.c | 1 + builtin/unpack-objects.c | 1 + builtin/verify-commit.c | 1 + bulk-checkin.c | 1 + bundle.c | 1 + cache-tree.c | 1 + cache.h | 119 +-------------------------------------- combine-diff.c | 1 + commit.c | 77 +++++++++++++------------ commit.h | 10 ++-- config.c | 1 + convert.c | 1 + diff.c | 1 + diffcore-rename.c | 1 + dir.c | 1 + entry.c | 1 + environment.c | 8 +-- fetch-pack.c | 9 +-- fsck.c | 3 +- git.c | 2 +- grep.c | 1 + list-objects-filter.c | 1 + list-objects.c | 1 + log-tree.c | 1 + mailmap.c | 1 + match-trees.c | 1 + merge-blobs.c | 1 + merge-recursive.c | 1 + notes-cache.c | 1 + notes-merge.c | 1 + notes.c | 1 + object-store.h | 117 ++++++++++++++++++++++++++++++++++++++ object.c | 4 ++ object.h | 10 ++++ pack-bitmap-write.c | 1 + packfile.h | 5 ++ path.c | 18 +++--- path.h | 40 ++++++++++--- read-cache.c | 1 + ref-filter.c | 1 + refs.c | 1 + remote-testsvn.c | 1 + remote.c | 1 + repository.h | 5 ++ rerere.c | 8 ++- revision.c | 1 + send-pack.c | 7 ++- sequencer.c | 38 +++++++------ shallow.c | 74 ++++++++++++------------ submodule-config.c | 1 + tag.c | 1 + tree-walk.c | 1 + tree.c | 1 + unpack-trees.c | 1 + upload-pack.c | 10 ++-- walker.c | 1 + wt-status.c | 8 +-- xdiff-interface.c | 1 + 94 files changed, 449 insertions(+), 315 deletions(-)
Signature · 252 lines
2.17.0.582.gccdcbd54c44.dirty
1: cbd53a2193d = 1: 20b6bef31b7 object-store: move object access functions to object-store.h
2: 6a1a79fd146 = 2: 6855b203842 object: move grafts to object parser
3: be479e801da = 3: 0afdfac30da commit: add repository argument to commit_graft_pos
4: 3f5787f8066 = 4: af84c3bc1dd commit: add repository argument to register_commit_graft
5: 02ba3e1a057 = 5: 154ec8bacc1 commit: add repository argument to read_graft_file
6: 3ee37656ee6 = 6: c12bd3a7870 commit: add repository argument to prepare_commit_graft
7: e6c898f460c ! 7: aef9cd4ffba commit: add repository argument to lookup_commit_graft
@@ -10,9 +10,6 @@
As with the previous commits, use a macro to catch callers passing a
repository other than the_repository at compile time.
- The included coccinelle semantic patch will adapt any new callers in
- the diff produced by `make coccicheck`.
-
Signed-off-by: Jonathan Nieder <[email protected]>
Signed-off-by: Stefan Beller <[email protected]>
Signed-off-by: Junio C Hamano <[email protected]>
8: f95ee308eb7 ! 8: 0025ae11097 shallow: add repository argument to set_alternate_shallow_file
@@ -2,8 +2,15 @@
shallow: add repository argument to set_alternate_shallow_file
+ Add a repository argument to allow callers of set_alternate_shallow_file
+ to be more specific about which repository to handle. This is a small
+ mechanical change; it doesn't change the implementation to handle
+ repositories other than the_repository yet.
+
+ As with the previous commits, use a macro to catch callers passing a
+ repository other than the_repository at compile time.
+
Signed-off-by: Stefan Beller <[email protected]>
- Signed-off-by: Junio C Hamano <[email protected]>
diff --git a/commit.h b/commit.h
--- a/commit.h
9: 11948c4278a ! 9: 3ee6c801d16 shallow: add repository argument to register_shallow
@@ -2,8 +2,15 @@
shallow: add repository argument to register_shallow
+ Add a repository argument to allow callers of register_shallow
+ to be more specific about which repository to handle. This is a small
+ mechanical change; it doesn't change the implementation to handle
+ repositories other than the_repository yet.
+
+ As with the previous commits, use a macro to catch callers passing a
+ repository other than the_repository at compile time.
+
Signed-off-by: Stefan Beller <[email protected]>
- Signed-off-by: Junio C Hamano <[email protected]>
diff --git a/builtin/pack-objects.c b/builtin/pack-objects.c
--- a/builtin/pack-objects.c
10: c69182008bd ! 10: f0d9eb428ef shallow: add repository argument to check_shallow_file_for_update
@@ -2,8 +2,15 @@
shallow: add repository argument to check_shallow_file_for_update
+ Add a repository argument to allow callers of check_shallow_file_for_update
+ to be more specific about which repository to handle. This is a small
+ mechanical change; it doesn't change the implementation to handle
+ repositories other than the_repository yet.
+
+ As with the previous commits, use a macro to catch callers passing a
+ repository other than the_repository at compile time.
+
Signed-off-by: Stefan Beller <[email protected]>
- Signed-off-by: Junio C Hamano <[email protected]>
diff --git a/shallow.c b/shallow.c
--- a/shallow.c
11: 2194490111e ! 11: 5ba578b5386 shallow: add repository argument to is_repository_shallow
@@ -2,8 +2,15 @@
shallow: add repository argument to is_repository_shallow
+ Add a repository argument to allow callers of is_repository_shallow
+ to be more specific about which repository to handle. This is a small
+ mechanical change; it doesn't change the implementation to handle
+ repositories other than the_repository yet.
+
+ As with the previous commits, use a macro to catch callers passing a
+ repository other than the_repository at compile time.
+
Signed-off-by: Stefan Beller <[email protected]>
- Signed-off-by: Junio C Hamano <[email protected]>
diff --git a/builtin/fetch.c b/builtin/fetch.c
--- a/builtin/fetch.c
12: 7560733756e ! 12: 8432e847c05 commit: convert commit_graft_pos() to handle arbitrary repositories
@@ -4,7 +4,6 @@
Signed-off-by: Brandon Williams <[email protected]>
Signed-off-by: Stefan Beller <[email protected]>
- Signed-off-by: Junio C Hamano <[email protected]>
diff --git a/commit.c b/commit.c
--- a/commit.c
13: 12a4071c6a5 ! 13: 8763c86af52 commit: convert register_commit_graft to handle arbitrary repositories
@@ -4,7 +4,6 @@
Signed-off-by: Brandon Williams <[email protected]>
Signed-off-by: Stefan Beller <[email protected]>
- Signed-off-by: Junio C Hamano <[email protected]>
diff --git a/commit.c b/commit.c
--- a/commit.c
14: a333e619158 ! 14: 2eea80787c6 commit: convert read_graft_file to handle arbitrary repositories
@@ -4,7 +4,6 @@
Signed-off-by: Brandon Williams <[email protected]>
Signed-off-by: Stefan Beller <[email protected]>
- Signed-off-by: Junio C Hamano <[email protected]>
diff --git a/commit.c b/commit.c
--- a/commit.c
15: 5c8f9317393 ! 15: 4f41b5cc4e8 cache: convert get_graft_file to handle arbitrary repositories
@@ -2,6 +2,10 @@
cache: convert get_graft_file to handle arbitrary repositories
+ This conversion was done without the #define trick used in the earlier
+ series refactoring to have better repository access, because this function
+ is easy to review, as all lines are converted and it has only one caller.
+
Signed-off-by: Stefan Beller <[email protected]>
Signed-off-by: Junio C Hamano <[email protected]>
16: adbe83bff1f ! 16: 77cc05fde8a path.c: migrate git_path_ to take a repository argument
@@ -1,6 +1,14 @@
Author: Stefan Beller <[email protected]>
- path.c: migrate git_path_ to take a repository argument
+ path.c: migrate global git_path_* to take a repository argument
+
+ Migrate all git_path_* functions that are defined in path.c to take a
+ repository argument. Unlike other patches in this series, do not use the
+ #define trick, as we rewrite the whole function, which is rather small.
+
+ This doesn't migrate all the functions, as other builtins have their own
+ local path functions defined using GIT_PATH_FUNC. So keep that macro
+ around to serve the other locations.
Signed-off-by: Stefan Beller <[email protected]>
Signed-off-by: Junio C Hamano <[email protected]>
@@ -374,15 +382,15 @@
-GIT_PATH_FUNC(git_path_merge_head, "MERGE_HEAD")
-GIT_PATH_FUNC(git_path_fetch_head, "FETCH_HEAD")
-GIT_PATH_FUNC(git_path_shallow, "shallow")
-+REPO_GIT_PATH_FUNC(path_cherry_pick_head, "CHERRY_PICK_HEAD")
-+REPO_GIT_PATH_FUNC(path_revert_head, "REVERT_HEAD")
-+REPO_GIT_PATH_FUNC(path_squash_msg, "SQUASH_MSG")
-+REPO_GIT_PATH_FUNC(path_merge_msg, "MERGE_MSG")
-+REPO_GIT_PATH_FUNC(path_merge_rr, "MERGE_RR")
-+REPO_GIT_PATH_FUNC(path_merge_mode, "MERGE_MODE")
-+REPO_GIT_PATH_FUNC(path_merge_head, "MERGE_HEAD")
-+REPO_GIT_PATH_FUNC(path_fetch_head, "FETCH_HEAD")
-+REPO_GIT_PATH_FUNC(path_shallow, "shallow")
++REPO_GIT_PATH_FUNC(cherry_pick_head, "CHERRY_PICK_HEAD")
++REPO_GIT_PATH_FUNC(revert_head, "REVERT_HEAD")
++REPO_GIT_PATH_FUNC(squash_msg, "SQUASH_MSG")
++REPO_GIT_PATH_FUNC(merge_msg, "MERGE_MSG")
++REPO_GIT_PATH_FUNC(merge_rr, "MERGE_RR")
++REPO_GIT_PATH_FUNC(merge_mode, "MERGE_MODE")
++REPO_GIT_PATH_FUNC(merge_head, "MERGE_HEAD")
++REPO_GIT_PATH_FUNC(fetch_head, "FETCH_HEAD")
++REPO_GIT_PATH_FUNC(shallow, "shallow")
diff --git a/path.h b/path.h
--- a/path.h
@@ -401,7 +409,7 @@
-const char *git_path_fetch_head(void);
-const char *git_path_shallow(void);
+#define REPO_GIT_PATH_FUNC(var, filename) \
-+ const char *git_##var(struct repository *r) \
++ const char *git_path_##var(struct repository *r) \
+ { \
+ if (!r->cached_paths.var) \
+ r->cached_paths.var = git_pathdup(filename); \
@@ -409,15 +417,15 @@
+ }
+
+struct path_cache {
-+ const char *path_cherry_pick_head;
-+ const char *path_revert_head;
-+ const char *path_squash_msg;
-+ const char *path_merge_msg;
-+ const char *path_merge_rr;
-+ const char *path_merge_mode;
-+ const char *path_merge_head;
-+ const char *path_fetch_head;
-+ const char *path_shallow;
++ const char *cherry_pick_head;
++ const char *revert_head;
++ const char *squash_msg;
++ const char *merge_msg;
++ const char *merge_rr;
++ const char *merge_mode;
++ const char *merge_head;
++ const char *fetch_head;
++ const char *shallow;
+};
+
+#define PATH_CACHE_INIT { NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL }
17: d73b49b7078 ! 17: d9b50420d32 shallow: migrate shallow information into the object parser
@@ -2,8 +2,10 @@
shallow: migrate shallow information into the object parser
+ We need to convert the shallow functions all at the same time
+ as we move the data structures they operate on into the repository.
+
Signed-off-by: Stefan Beller <[email protected]>
- Signed-off-by: Junio C Hamano <[email protected]>
diff --git a/commit.h b/commit.h
--- a/commit.h
@@ -72,8 +74,7 @@
-static int is_shallow = -1;
-static struct stat_validity shallow_stat;
-static char *alternate_shallow_file;
-+struct stat_validity the_repository_shallow_stat;
-
+-
-void set_alternate_shallow_file_the_repository(const char *path, int override)
+void set_alternate_shallow_file(struct repository *r, const char *path, int override)
{
18: cede061c90f ! 18: 0458d3b9fac commit: allow prepare_commit_graft to handle arbitrary repositories
@@ -2,8 +2,11 @@
commit: allow prepare_commit_graft to handle arbitrary repositories
+ Move the global variable 'commit_graft_prepared' into the object
+ pool and convert the function prepare_commit_graft to work
+ an arbitrary repositories.
+
Signed-off-by: Stefan Beller <[email protected]>
- Signed-off-by: Junio C Hamano <[email protected]>
diff --git a/commit.c b/commit.c
--- a/commit.c
19: 7dc1693a492 ! 19: 39c2ddce2e1 commit: allow lookup_commit_graft to handle arbitrary repositories
@@ -3,7 +3,6 @@
commit: allow lookup_commit_graft to handle arbitrary repositories
Signed-off-by: Stefan Beller <[email protected]>
- Signed-off-by: Junio C Hamano <[email protected]>
diff --git a/commit.c b/commit.c
--- a/commit.cPATCH 1/19 object-store: move object access functions to object-store.h
This should make these functions easier to find and cache.h less overwhelming to read.
In particular, this moves:
- read_object_file
- oid_object_info
- write_object_file
As a result, most of the codebase needs to #include object-store.h. In this patch the #include is only added to files that would fail to compile otherwise. It would be better to #include wherever identifiers from the header are used. That can happen later when we have better tooling for it.
--- apply.c | 1 + archive-tar.c | 1 + archive-zip.c | 1 + archive.c | 1 + blame.c | 1 + builtin/blame.c | 1 + builtin/cat-file.c | 1 + builtin/checkout.c | 1 + builtin/clone.c | 1 + builtin/commit-tree.c | 1 + builtin/describe.c | 1 + builtin/difftool.c | 1 + builtin/fast-export.c | 1 + builtin/fetch.c | 1 + builtin/fmt-merge-msg.c | 1 + builtin/hash-object.c | 1 + builtin/log.c | 1 + builtin/ls-tree.c | 1 + builtin/merge-tree.c | 1 + builtin/mktag.c | 1 + builtin/mktree.c | 1 + builtin/notes.c | 1 + builtin/prune.c | 1 + builtin/receive-pack.c | 1 + builtin/reflog.c | 1 + builtin/remote.c | 1 + builtin/rev-list.c | 1 + builtin/show-ref.c | 1 + builtin/tag.c | 1 + builtin/unpack-file.c | 1 + builtin/unpack-objects.c | 1 + builtin/verify-commit.c | 1 + bulk-checkin.c | 1 + bundle.c | 1 + cache-tree.c | 1 + cache.h | 117 --------------------------------------- combine-diff.c | 1 + commit.c | 1 + config.c | 1 + convert.c | 1 + diff.c | 1 + diffcore-rename.c | 1 + dir.c | 1 + entry.c | 1 + fetch-pack.c | 1 + fsck.c | 1 + grep.c | 1 + list-objects-filter.c | 1 + list-objects.c | 1 + log-tree.c | 1 + mailmap.c | 1 + match-trees.c | 1 + merge-blobs.c | 1 + merge-recursive.c | 1 + notes-cache.c | 1 + notes-merge.c | 1 + notes.c | 1 + object-store.h | 117 +++++++++++++++++++++++++++++++++++++++ object.c | 1 + pack-bitmap-write.c | 1 + packfile.h | 5 ++ read-cache.c | 1 + ref-filter.c | 1 + refs.c | 1 + remote-testsvn.c | 1 + remote.c | 1 + rerere.c | 1 + revision.c | 1 + send-pack.c | 1 + sequencer.c | 1 + shallow.c | 1 + submodule-config.c | 1 + tag.c | 1 + tree-walk.c | 1 + tree.c | 1 + unpack-trees.c | 1 + upload-pack.c | 1 + walker.c | 1 + xdiff-interface.c | 1 + 79 files changed, 198 insertions(+), 117 deletions(-)
apply.c +1 -0
@@ -9,6 +9,7 @@#include "cache.h" #include "config.h" +#include "object-store.h" #include "blob.h" #include "delta.h" #include "diff.h"
archive-tar.c +1 -0
@@ -5,6 +5,7 @@#include "config.h" #include "tar.h" #include "archive.h" +#include "object-store.h" #include "streaming.h" #include "run-command.h"
archive-zip.c +1 -0
@@ -6,6 +6,7 @@#include "archive.h" #include "streaming.h" #include "utf8.h" +#include "object-store.h" #include "userdiff.h" #include "xdiff-interface.h"
archive.c +1 -0
@@ -1,6 +1,7 @@#include "cache.h" #include "config.h" #include "refs.h" +#include "object-store.h" #include "commit.h" #include "tree-walk.h" #include "attr.h"
blame.c +1 -0
@@ -1,5 +1,6 @@#include "cache.h" #include "refs.h" +#include "object-store.h" #include "cache-tree.h" #include "mergesort.h" #include "diff.h"
builtin/blame.c +1 -0
@@ -22,6 +22,7 @@#include "line-log.h" #include "dir.h" #include "progress.h" +#include "object-store.h" #include "blame.h" static char blame_usage[] =N_ ("git blame [<options>] [<rev-opts>] [<rev>] [--] <file>" );
builtin/cat-file.c +1 -0
@@ -13,6 +13,7 @@#include "tree-walk.h" #include "sha1-array.h" #include "packfile.h" +#include "object-store.h" struct batch_options {int enabled;
builtin/checkout.c +1 -0
@@ -4,6 +4,7 @@#include "lockfile.h" #include "parse-options.h" #include "refs.h" +#include "object-store.h" #include "commit.h" #include "tree.h" #include "tree-walk.h"
builtin/clone.c +1 -0
@@ -14,6 +14,7 @@#include "parse-options.h" #include "fetch-pack.h" #include "refs.h" +#include "object-store.h" #include "tree.h" #include "tree-walk.h" #include "unpack-trees.h"
builtin/commit-tree.c +1 -0
@@ -5,6 +5,7 @@*/ #include "cache.h" #include "config.h" +#include "object-store.h" #include "commit.h" #include "tree.h" #include "builtin.h"
builtin/describe.c +1 -0
@@ -13,6 +13,7 @@#include "hashmap.h" #include "argv-array.h" #include "run-command.h" +#include "object-store.h" #include "revision.h" #include "list-objects.h"
builtin/difftool.c +1 -0
@@ -20,6 +20,7 @@#include "argv-array.h" #include "strbuf.h" #include "lockfile.h" +#include "object-store.h" #include "dir.h" static char *diff_gui_tool;
builtin/fast-export.c +1 -0
@@ -7,6 +7,7 @@#include "cache.h" #include "config.h" #include "refs.h" +#include "object-store.h" #include "commit.h" #include "object.h" #include "tag.h"
builtin/fetch.c +1 -0
@@ -5,6 +5,7 @@#include "config.h" #include "repository.h" #include "refs.h" +#include "object-store.h" #include "commit.h" #include "builtin.h" #include "string-list.h"
builtin/fmt-merge-msg.c +1 -0
@@ -2,6 +2,7 @@#include "cache.h" #include "config.h" #include "refs.h" +#include "object-store.h" #include "commit.h" #include "diff.h" #include "revision.h"
builtin/hash-object.c +1 -0
@@ -6,6 +6,7 @@*/ #include "builtin.h" #include "config.h" +#include "object-store.h" #include "blob.h" #include "quote.h" #include "parse-options.h"
builtin/log.c +1 -0
@@ -7,6 +7,7 @@#include "cache.h" #include "config.h" #include "refs.h" +#include "object-store.h" #include "color.h" #include "commit.h" #include "diff.h"
builtin/ls-tree.c +1 -0
@@ -5,6 +5,7 @@*/ #include "cache.h" #include "config.h" +#include "object-store.h" #include "blob.h" #include "tree.h" #include "commit.h"
builtin/merge-tree.c +1 -0
@@ -1,6 +1,7 @@#include "builtin.h" #include "tree-walk.h" #include "xdiff-interface.h" +#include "object-store.h" #include "blob.h" #include "exec_cmd.h" #include "merge-blobs.h"
builtin/mktag.c +1 -0
@@ -1,6 +1,7 @@#include "builtin.h" #include "tag.h" #include "replace-object.h" +#include "object-store.h" /* * A signature file has a very simple fixed format: four lines
builtin/mktree.c +1 -0
@@ -7,6 +7,7 @@#include "quote.h" #include "tree.h" #include "parse-options.h" +#include "object-store.h" static struct treeent { unsigned mode;
builtin/notes.c +1 -0
@@ -11,6 +11,7 @@#include "config.h" #include "builtin.h" #include "notes.h" +#include "object-store.h" #include "blob.h" #include "pretty.h" #include "refs.h"
builtin/prune.c +1 -0
@@ -6,6 +6,7 @@#include "reachable.h" #include "parse-options.h" #include "progress.h" +#include "object-store.h" static const char *const prune_usage[] = {N_ ("git prune [-n] [-v] [--progress] [--expire <time>] [--] [<head>...]" ),
builtin/receive-pack.c +1 -0
@@ -25,6 +25,7 @@#include "tmp-objdir.h" #include "oidset.h" #include "packfile.h" +#include "object-store.h" #include "protocol.h" static const char *const receive_pack_usage[] = {
builtin/reflog.c +1 -0
@@ -1,6 +1,7 @@#include "builtin.h" #include "config.h" #include "lockfile.h" +#include "object-store.h" #include "commit.h" #include "refs.h" #include "dir.h"
builtin/remote.c +1 -0
@@ -7,6 +7,7 @@#include "strbuf.h" #include "run-command.h" #include "refs.h" +#include "object-store.h" #include "argv-array.h" static const char *const builtin_remote_usage[] = {
builtin/rev-list.c +1 -0
@@ -6,6 +6,7 @@#include "list-objects.h" #include "list-objects-filter.h" #include "list-objects-filter-options.h" +#include "object-store.h" #include "pack.h" #include "pack-bitmap.h" #include "builtin.h"
builtin/show-ref.c +1 -0
@@ -1,6 +1,7 @@#include "builtin.h" #include "cache.h" #include "refs.h" +#include "object-store.h" #include "object.h" #include "tag.h" #include "string-list.h"
builtin/tag.c +1 -0
@@ -10,6 +10,7 @@#include "config.h" #include "builtin.h" #include "refs.h" +#include "object-store.h" #include "tag.h" #include "run-command.h" #include "parse-options.h"
builtin/unpack-file.c +1 -0
@@ -1,5 +1,6 @@#include "builtin.h" #include "config.h" +#include "object-store.h" static char *create_temp_file (struct object_id *oid) {
builtin/unpack-objects.c +1 -0
@@ -1,6 +1,7 @@#include "builtin.h" #include "cache.h" #include "config.h" +#include "object-store.h" #include "object.h" #include "delta.h" #include "pack.h"
builtin/verify-commit.c +1 -0
@@ -8,6 +8,7 @@#include "cache.h" #include "config.h" #include "builtin.h" +#include "object-store.h" #include "commit.h" #include "run-command.h" #include <signal.h>
bulk-checkin.c +1 -0
@@ -8,6 +8,7 @@#include "pack.h" #include "strbuf.h" #include "packfile.h" +#include "object-store.h" static struct bulk_checkin_state { unsigned plugged:1;
bundle.c +1 -0
@@ -1,6 +1,7 @@#include "cache.h" #include "lockfile.h" #include "bundle.h" +#include "object-store.h" #include "object.h" #include "commit.h" #include "diff.h"
cache-tree.c +1 -0
@@ -3,6 +3,7 @@#include "tree.h" #include "tree-walk.h" #include "cache-tree.h" +#include "object-store.h" #ifndef DEBUG #define DEBUG 0
cache.h +0 -117
135 lines not on this page · raw message
combine-diff.c +1 -0
@@ -1,4 +1,5 @@#include "cache.h" +#include "object-store.h" #include "commit.h" #include "blob.h" #include "diff.h"
commit.c +1 -0
@@ -1,6 +1,7 @@#include "cache.h" #include "tag.h" #include "commit.h" +#include "object-store.h" #include "pkt-line.h" #include "utf8.h" #include "diff.h"
config.c +1 -0
@@ -14,6 +14,7 @@#include "quote.h" #include "hashmap.h" #include "string-list.h" +#include "object-store.h" #include "utf8.h" #include "dir.h"
convert.c +1 -0
@@ -1,6 +1,7 @@#define NO_THE_INDEX_COMPATIBILITY_MACROS #include "cache.h" #include "config.h" +#include "object-store.h" #include "attr.h" #include "run-command.h" #include "quote.h"
diff.c +1 -0
@@ -13,6 +13,7 @@#include "attr.h" #include "run-command.h" #include "utf8.h" +#include "object-store.h" #include "userdiff.h" #include "submodule-config.h" #include "submodule.h"
diffcore-rename.c +1 -0
@@ -4,6 +4,7 @@#include "cache.h" #include "diff.h" #include "diffcore.h" +#include "object-store.h" #include "hashmap.h" #include "progress.h"
dir.c +1 -0
@@ -11,6 +11,7 @@#include "cache.h" #include "config.h" #include "dir.h" +#include "object-store.h" #include "attr.h" #include "refs.h" #include "wildmatch.h"
entry.c +1 -0
@@ -1,5 +1,6 @@#include "cache.h" #include "blob.h" +#include "object-store.h" #include "dir.h" #include "streaming.h" #include "submodule.h"
fetch-pack.c +1 -0
@@ -19,6 +19,7 @@#include "sha1-array.h" #include "oidset.h" #include "packfile.h" +#include "object-store.h" static int transfer_unpack_limit =-1 ;static int fetch_unpack_limit =-1 ;
fsck.c +1 -0
@@ -1,4 +1,5 @@#include "cache.h" +#include "object-store.h" #include "object.h" #include "blob.h" #include "tree.h"
grep.c +1 -0
@@ -1,6 +1,7 @@#include "cache.h" #include "config.h" #include "grep.h" +#include "object-store.h" #include "userdiff.h" #include "xdiff-interface.h" #include "diff.h"
list-objects-filter.c +1 -0
@@ -11,6 +11,7 @@#include "list-objects-filter.h" #include "list-objects-filter-options.h" #include "oidset.h" +#include "object-store.h" /* Remember to update object flag allocation in object.h */ /*
list-objects.c +1 -0
@@ -10,6 +10,7 @@#include "list-objects-filter.h" #include "list-objects-filter-options.h" #include "packfile.h" +#include "object-store.h" static void process_blob(struct rev_info *revs, struct blob *blob,
log-tree.c +1 -0
@@ -1,6 +1,7 @@#include "cache.h" #include "config.h" #include "diff.h" +#include "object-store.h" #include "commit.h" #include "tag.h" #include "graph.h"
mailmap.c +1 -0
@@ -1,6 +1,7 @@#include "cache.h" #include "string-list.h" #include "mailmap.h" +#include "object-store.h" #define DEBUG_MAILMAP 0#if DEBUG_MAILMAP
match-trees.c +1 -0
@@ -1,6 +1,7 @@#include "cache.h" #include "tree.h" #include "tree-walk.h" +#include "object-store.h" static int score_missing (unsigned mode,const char *path) {
merge-blobs.c +1 -0
@@ -4,6 +4,7 @@#include "ll-merge.h" #include "blob.h" #include "merge-blobs.h" +#include "object-store.h" static int fill_mmfile_blob (mmfile_t *f,struct blob *obj) {
merge-recursive.c +1 -0
@@ -8,6 +8,7 @@#include "advice.h" #include "lockfile.h" #include "cache-tree.h" +#include "object-store.h" #include "commit.h" #include "blob.h" #include "builtin.h"
notes-cache.c +1 -0
@@ -1,5 +1,6 @@#include "cache.h" #include "notes-cache.h" +#include "object-store.h" #include "commit.h" #include "refs.h"
notes-merge.c +1 -0
@@ -1,6 +1,7 @@#include "cache.h" #include "commit.h" #include "refs.h" +#include "object-store.h" #include "diff.h" #include "diffcore.h" #include "xdiff-interface.h"
notes.c +1 -0
@@ -1,6 +1,7 @@#include "cache.h" #include "config.h" #include "notes.h" +#include "object-store.h" #include "blob.h" #include "tree.h" #include "utf8.h"
object-store.h +117 -0
121 lines not on this page · raw message
object.c +1 -0
@@ -1,6 +1,7 @@#include "cache.h" #include "object.h" #include "replace-object.h" +#include "object-store.h" #include "blob.h" #include "tree.h" #include "commit.h"
pack-bitmap-write.c +1 -0
@@ -1,4 +1,5 @@#include "cache.h" +#include "object-store.h" #include "commit.h" #include "tag.h" #include "diff.h"
packfile.h +5 -0
@@ -3,6 +3,11 @@#include "oidset.h" +/* in object-store.h */ +struct packed_git ; +struct object_info ; +enum object_type ; +/* * Generate the filename to be used for a pack file with checksum "sha1" and * extension "ext". The result is written into the strbuf "buf", overwriting
read-cache.c +1 -0
@@ -11,6 +11,7 @@#include "cache-tree.h" #include "refs.h" #include "dir.h" +#include "object-store.h" #include "tree.h" #include "commit.h" #include "blob.h"
ref-filter.c +1 -0
@@ -3,6 +3,7 @@#include "parse-options.h" #include "refs.h" #include "wildmatch.h" +#include "object-store.h" #include "commit.h" #include "remote.h" #include "color.h"
refs.c +1 -0
@@ -9,6 +9,7 @@#include "iterator.h" #include "refs.h" #include "refs/refs-internal.h" +#include "object-store.h" #include "object.h" #include "tag.h" #include "submodule.h"
remote-testsvn.c +1 -0
@@ -1,6 +1,7 @@#include "cache.h" #include "refs.h" #include "remote.h" +#include "object-store.h" #include "strbuf.h" #include "url.h" #include "exec_cmd.h"
remote.c +1 -0
@@ -2,6 +2,7 @@#include "config.h" #include "remote.h" #include "refs.h" +#include "object-store.h" #include "commit.h" #include "diff.h" #include "revision.h"
rerere.c +1 -0
@@ -9,6 +9,7 @@#include "ll-merge.h" #include "attr.h" #include "pathspec.h" +#include "object-store.h" #include "sha1-lookup.h" #define RESOLVED 0
revision.c +1 -0
@@ -1,4 +1,5 @@#include "cache.h" +#include "object-store.h" #include "tag.h" #include "blob.h" #include "tree.h"
send-pack.c +1 -0
@@ -2,6 +2,7 @@#include "config.h" #include "commit.h" #include "refs.h" +#include "object-store.h" #include "pkt-line.h" #include "sideband.h" #include "run-command.h"
sequencer.c +1 -0
@@ -2,6 +2,7 @@#include "config.h" #include "lockfile.h" #include "dir.h" +#include "object-store.h" #include "object.h" #include "commit.h" #include "sequencer.h"
shallow.c +1 -0
@@ -1,6 +1,7 @@#include "cache.h" #include "tempfile.h" #include "lockfile.h" +#include "object-store.h" #include "commit.h" #include "tag.h" #include "pkt-line.h"
submodule-config.c +1 -0
@@ -4,6 +4,7 @@#include "submodule-config.h" #include "submodule.h" #include "strbuf.h" +#include "object-store.h" #include "parse-options.h" /*
tag.c +1 -0
@@ -1,5 +1,6 @@#include "cache.h" #include "tag.h" +#include "object-store.h" #include "commit.h" #include "tree.h" #include "blob.h"
tree-walk.c +1 -0
@@ -2,6 +2,7 @@#include "tree-walk.h" #include "unpack-trees.h" #include "dir.h" +#include "object-store.h" #include "tree.h" #include "pathspec.h"
tree.c +1 -0
@@ -2,6 +2,7 @@#include "cache.h" #include "cache-tree.h" #include "tree.h" +#include "object-store.h" #include "blob.h" #include "commit.h" #include "tag.h"
unpack-trees.c +1 -0
@@ -15,6 +15,7 @@#include "submodule.h" #include "submodule-config.h" #include "fsmonitor.h" +#include "object-store.h" #include "fetch-object.h" /*
upload-pack.c +1 -0
@@ -3,6 +3,7 @@#include "refs.h" #include "pkt-line.h" #include "sideband.h" +#include "object-store.h" #include "tag.h" #include "object.h" #include "commit.h"
walker.c +1 -0
@@ -1,5 +1,6 @@#include "cache.h" #include "walker.h" +#include "object-store.h" #include "commit.h" #include "tree.h" #include "tree-walk.h"
xdiff-interface.c +1 -0
@@ -1,5 +1,6 @@#include "cache.h" #include "config.h" +#include "object-store.h" #include "xdiff-interface.h" #include "xdiff/xtypes.h" #include "xdiff/xdiffi.h"
Signature · 1 line
2.17.0.582.gccdcbd54c44.dirty
PATCH 2/19 object: move grafts to object parser
In reply to Stefan BellerFrom: Jonathan Nieder <[email protected]>
Grafts are only meaningful in the context of a single repository. Therefore they cannot be global.
--- commit.c | 42 +++++++++++++++++++++++------------------- object.h | 4 ++++ 2 files changed, 27 insertions(+), 19 deletions(-)
commit.c +23 -19
@@ -1,6 +1,7 @@#include "cache.h" #include "tag.h" #include "commit.h" +#include "repository.h" #include "object-store.h" #include "pkt-line.h" #include "utf8.h"
@@ -97,9 +98,6 @@ static timestamp_t parse_commit_date(const char *buf, const char *tail)return parse_timestamp (dateptr,NULL ,10 ); } -static struct commit_graft **commit_graft; -static int commit_graft_alloc, commit_graft_nr; -static const unsigned char *commit_graft_sha1_access (size_t index,void *table) {struct commit_graft **commit_graft_table = table;
@@ -108,7 +106,8 @@ static const unsigned char *commit_graft_sha1_access(size_t index, void *table)static int commit_graft_pos (const unsigned char *sha1) { -return sha1_pos (sha1, commit_graft, commit_graft_nr, +return sha1_pos (sha1, the_repository->parsed_objects->grafts, + the_repository->parsed_objects->grafts_nr, commit_graft_sha1_access); }
@@ -120,18 +119,22 @@ int register_commit_graft(struct commit_graft *graft, int ignore_dups)if (ignore_dups)free (graft);else { -free (commit_graft[pos]); - commit_graft[pos] = graft; +free (the_repository->parsed_objects->grafts[pos]); + the_repository->parsed_objects->grafts[pos] = graft; }return 1 ; } pos = -pos -1 ; -ALLOC_GROW (commit_graft, commit_graft_nr +1 , commit_graft_alloc); - commit_graft_nr++; -if (pos < commit_graft_nr) -MOVE_ARRAY (commit_graft + pos +1 , commit_graft + pos, - commit_graft_nr - pos -1 ); - commit_graft[pos] = graft; +ALLOC_GROW (the_repository->parsed_objects->grafts, + the_repository->parsed_objects->grafts_nr +1 , + the_repository->parsed_objects->grafts_alloc); + the_repository->parsed_objects->grafts_nr++; +if (pos < the_repository->parsed_objects->grafts_nr) +memmove (the_repository->parsed_objects->grafts + pos +1 , + the_repository->parsed_objects->grafts + pos, + (the_repository->parsed_objects->grafts_nr - pos -1 ) * +sizeof (*the_repository->parsed_objects->grafts)); + the_repository->parsed_objects->grafts[pos] = graft;return 0 ; }
@@ -213,14 +216,14 @@ struct commit_graft *lookup_commit_graft(const struct object_id *oid) pos =commit_graft_pos (oid->hash);if (pos <0 )return NULL ; -return commit_graft[pos]; +return the_repository->parsed_objects->grafts[pos]; }int for_each_commit_graft (each_commit_graft_fn fn,void *cb_data) {int i, ret; -for (i = ret =0 ; i < commit_graft_nr && !ret; i++) - ret =fn (commit_graft[i], cb_data); +for (i = ret =0 ; i < the_repository->parsed_objects->grafts_nr && !ret; i++) + ret =fn (the_repository->parsed_objects->grafts[i], cb_data);return ret; }
@@ -229,10 +232,11 @@ int unregister_shallow(const struct object_id *oid)int pos =commit_graft_pos (oid->hash);if (pos <0 )return -1 ; -if (pos +1 < commit_graft_nr) -MOVE_ARRAY (commit_graft + pos, commit_graft + pos +1 , - commit_graft_nr - pos -1 ); - commit_graft_nr--; +if (pos +1 < the_repository->parsed_objects->grafts_nr) +MOVE_ARRAY (the_repository->parsed_objects->grafts + pos, + the_repository->parsed_objects->grafts + pos +1 , + the_repository->parsed_objects->grafts_nr - pos -1 ); + the_repository->parsed_objects->grafts_nr--;return 0 ; }
object.h +4 -0
@@ -12,6 +12,10 @@ struct parsed_object_pool {struct alloc_state *tag_state;struct alloc_state *object_state;unsigned commit_count; + +/* parent substitutions from .git/info/grafts and .git/shallow */ +struct commit_graft **grafts; +int grafts_alloc, grafts_nr; };struct parsed_object_pool *parsed_object_pool_new (void );
Signature · 1 line
2.17.0.582.gccdcbd54c44.dirty
PATCH 3/19 commit: add repository argument to commit_graft_pos
In reply to Stefan BellerFrom: Jonathan Nieder <[email protected]>
Add a repository argument to allow callers of commit_graft_pos to be more specific about which repository to handle. This is a small mechanical change; it doesn't change the implementation to handle repositories other than the_repository yet.
As with the previous commits, use a macro to catch callers passing a repository other than the_repository at compile time.
--- commit.c | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-)
commit.c +5 -4
@@ -104,7 +104,8 @@ static const unsigned char *commit_graft_sha1_access(size_t index, void *table)return commit_graft_table[index]->oid.hash; } -static int commit_graft_pos (const unsigned char *sha1) +#define commit_graft_pos (r, s) commit_graft_pos_##r(s) +static int commit_graft_pos_the_repository (const unsigned char *sha1) { return sha1_pos(sha1, the_repository->parsed_objects->grafts, the_repository->parsed_objects->grafts_nr,
@@ -113,7 +114,7 @@ static int commit_graft_pos(const unsigned char *sha1)int register_commit_graft (struct commit_graft *graft,int ignore_dups) { -int pos =commit_graft_pos (graft->oid.hash); +int pos =commit_graft_pos (the_repository, graft->oid.hash);if (0 <= pos) {if (ignore_dups)
@@ -213,7 +214,7 @@ struct commit_graft *lookup_commit_graft(const struct object_id *oid) {int pos;prepare_commit_graft (); - pos =commit_graft_pos (oid->hash); + pos =commit_graft_pos (the_repository, oid->hash);if (pos <0 )return NULL ;return the_repository->parsed_objects->grafts[pos];
@@ -229,7 +230,7 @@ int for_each_commit_graft(each_commit_graft_fn fn, void *cb_data)int unregister_shallow (const struct object_id *oid) { -int pos =commit_graft_pos (oid->hash); +int pos =commit_graft_pos (the_repository, oid->hash);if (pos <0 )return -1 ;if (pos +1 < the_repository->parsed_objects->grafts_nr)
Signature · 1 line
2.17.0.582.gccdcbd54c44.dirty
PATCH 4/19 commit: add repository argument to register_commit_graft
In reply to Stefan BellerFrom: Jonathan Nieder <[email protected]>
Add a repository argument to allow callers of register_commit_graft to be more specific about which repository to handle. This is a small mechanical change; it doesn't change the implementation to handle repositories other than the_repository yet.
As with the previous commits, use a macro to catch callers passing a repository other than the_repository at compile time.
--- builtin/blame.c | 3 ++- commit.c | 4 ++-- commit.h | 3 ++- shallow.c | 3 ++- 4 files changed, 8 insertions(+), 5 deletions(-)
builtin/blame.c +2 -1
@@ -8,6 +8,7 @@#include "cache.h" #include "config.h" #include "builtin.h" +#include "repository.h" #include "commit.h" #include "diff.h" #include "revision.h"
@@ -491,7 +492,7 @@ static int read_ancestry(const char *graft_file)/* The format is just "Commit Parent1 Parent2 ...\n" */ struct commit_graft *graft =read_graft_line (&buf);if (graft) -register_commit_graft (graft,0 ); +register_commit_graft (the_repository, graft,0 ); }fclose (fp);strbuf_release (&buf);
commit.c +2 -2
@@ -112,7 +112,7 @@ static int commit_graft_pos_the_repository(const unsigned char *sha1) commit_graft_sha1_access); } -int register_commit_graft (struct commit_graft *graft,int ignore_dups) +int register_commit_graft_the_repository (struct commit_graft *graft,int ignore_dups) {int pos =commit_graft_pos (the_repository, graft->oid.hash);
@@ -188,7 +188,7 @@ static int read_graft_file(const char *graft_file)struct commit_graft *graft =read_graft_line (&buf);if (!graft)continue ; -if (register_commit_graft (graft,1 )) +if (register_commit_graft (the_repository, graft,1 ))error ("duplicate graft data: %s" , buf.buf); }fclose (fp);
commit.h +2 -1
@@ -174,7 +174,8 @@ struct commit_graft {typedef int (*each_commit_graft_fn )(const struct commit_graft *,void *);struct commit_graft *read_graft_line (struct strbuf *line); -int register_commit_graft (struct commit_graft *,int ); +#define register_commit_graft (r, g, i) register_commit_graft_##r(g, i) +int register_commit_graft_the_repository (struct commit_graft *,int );struct commit_graft *lookup_commit_graft (const struct object_id *oid);extern struct commit_list *get_merge_bases (struct commit *rev1,struct commit *rev2);
shallow.c +2 -1
@@ -1,4 +1,5 @@#include "cache.h" +#include "repository.h" #include "tempfile.h" #include "lockfile.h" #include "object-store.h"
@@ -38,7 +39,7 @@ int register_shallow(const struct object_id *oid) graft->nr_parent =-1 ;if (commit && commit->object.parsed) commit->parents =NULL ; -return register_commit_graft (graft,0 ); +return register_commit_graft (the_repository, graft,0 ); }int is_repository_shallow (void )
Signature · 1 line
2.17.0.582.gccdcbd54c44.dirty
PATCH 5/19 commit: add repository argument to read_graft_file
In reply to Stefan BellerFrom: Jonathan Nieder <[email protected]>
Add a repository argument to allow the caller of read_graft_file to be more specific about which repository to handle. This is a small mechanical change; it doesn't change the implementation to handle repositories other than the_repository yet.
As with the previous commits, use a macro to catch callers passing a repository other than the_repository at compile time.
--- commit.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-)
commit.c +3 -2
@@ -177,7 +177,8 @@ struct commit_graft *read_graft_line(struct strbuf *line)return NULL ; } -static int read_graft_file (const char *graft_file) +#define read_graft_file (r, f) read_graft_file_##r(f) +static int read_graft_file_the_repository (const char *graft_file) {FILE *fp =fopen_or_warn (graft_file,"r" );struct strbuf buf =STRBUF_INIT ;
@@ -204,7 +205,7 @@ static void prepare_commit_graft(void)if (commit_graft_prepared)return ; graft_file =get_graft_file (); -read_graft_file (graft_file); +read_graft_file (the_repository, graft_file);/* make sure shallows are read */ is_repository_shallow (); commit_graft_prepared =1 ;
Signature · 1 line
2.17.0.582.gccdcbd54c44.dirty
PATCH 6/19 commit: add repository argument to prepare_commit_graft
In reply to Stefan BellerFrom: Jonathan Nieder <[email protected]>
Add a repository argument to allow the caller of prepare_commit_graft to be more specific about which repository to handle. This is a small mechanical change; it doesn't change the implementation to handle repositories other than the_repository yet.
As with the previous commits, use a macro to catch callers passing a repository other than the_repository at compile time.
--- commit.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-)
commit.c +3 -2
@@ -197,7 +197,8 @@ static int read_graft_file_the_repository(const char *graft_file)return 0 ; } -static void prepare_commit_graft (void ) +#define prepare_commit_graft (r) prepare_commit_graft_##r() +static void prepare_commit_graft_the_repository (void ) {static int commit_graft_prepared;char *graft_file;
@@ -214,7 +215,7 @@ static void prepare_commit_graft(void)struct commit_graft *lookup_commit_graft (const struct object_id *oid) {int pos; -prepare_commit_graft (); +prepare_commit_graft (the_repository); pos =commit_graft_pos (the_repository, oid->hash);if (pos <0 )return NULL ;
Signature · 1 line
2.17.0.582.gccdcbd54c44.dirty
PATCH 7/19 commit: add repository argument to lookup_commit_graft
In reply to Stefan BellerFrom: Jonathan Nieder <[email protected]>
Add a repository argument to allow callers of lookup_commit_graft to be more specific about which repository to handle. This is a small mechanical change; it doesn't change the implementation to handle repositories other than the_repository yet.
As with the previous commits, use a macro to catch callers passing a repository other than the_repository at compile time.
--- commit.c | 4 ++-- commit.h | 3 ++- fsck.c | 2 +- shallow.c | 5 +++-- 4 files changed, 8 insertions(+), 6 deletions(-)
commit.c +2 -2
@@ -212,7 +212,7 @@ static void prepare_commit_graft_the_repository(void) commit_graft_prepared =1 ; } -struct commit_graft *lookup_commit_graft (const struct object_id *oid) +struct commit_graft *lookup_commit_graft_the_repository (const struct object_id *oid) {int pos;prepare_commit_graft (the_repository);
@@ -359,7 +359,7 @@ int parse_commit_buffer(struct commit *item, const void *buffer, unsigned long s bufptr += tree_entry_len +1 ;/* "tree " + "hex sha1" + "\n" */ pptr = &item->parents; - graft =lookup_commit_graft (&item->object.oid); + graft =lookup_commit_graft (the_repository, &item->object.oid);while (bufptr + parent_entry_len < tail && !memcmp (bufptr,"parent " ,7 )) {struct commit *new_parent;
commit.h +2 -1
@@ -176,7 +176,8 @@ typedef int (*each_commit_graft_fn)(const struct commit_graft *, void *);struct commit_graft *read_graft_line (struct strbuf *line);#define register_commit_graft (r, g, i) register_commit_graft_##r(g, i)int register_commit_graft_the_repository (struct commit_graft *,int ); -struct commit_graft *lookup_commit_graft (const struct object_id *oid); +#define lookup_commit_graft (r, o) lookup_commit_graft_##r(o) +struct commit_graft *lookup_commit_graft_the_repository (const struct object_id *oid);extern struct commit_list *get_merge_bases (struct commit *rev1,struct commit *rev2);extern struct commit_list *get_merge_bases_many (struct commit *one,int n,struct commit **twos);
fsck.c +1 -1
@@ -738,7 +738,7 @@ static int fsck_commit_buffer(struct commit *commit, const char *buffer, buffer +=41 ; parent_line_count++; } - graft =lookup_commit_graft (&commit->object.oid); + graft =lookup_commit_graft (the_repository, &commit->object.oid); parent_count =commit_list_count (commit->parents);if (graft) {if (graft->nr_parent ==-1 && !parent_count)
shallow.c +3 -2
@@ -109,7 +109,7 @@ struct commit_list *get_shallow_commits(struct object_array *heads, int depth, cur_depth++;if ((depth !=INFINITE_DEPTH && cur_depth >= depth) || (is_repository_shallow () && !commit->parents && - (graft =lookup_commit_graft (&commit->object.oid)) !=NULL && + (graft =lookup_commit_graft (the_repository, &commit->object.oid)) !=NULL && graft->nr_parent <0 )) {commit_list_insert (commit, &result); commit->object.flags |= shallow_flag;
@@ -398,7 +398,8 @@ void prepare_shallow_info(struct shallow_info *info, struct oid_array *sa)for (i =0 ; i < sa->nr; i++) {if (has_object_file (sa->oid + i)) {struct commit_graft *graft; - graft =lookup_commit_graft (&sa->oid[i]); + graft =lookup_commit_graft (the_repository, + &sa->oid[i]);if (graft && graft->nr_parent <0 )continue ; info->ours[info->nr_ours++] = i;
Signature · 1 line
2.17.0.582.gccdcbd54c44.dirty
PATCH 8/19 shallow: add repository argument to set_alternate_shallow_file
In reply to Stefan BellerAdd a repository argument to allow callers of set_alternate_shallow_file to be more specific about which repository to handle. This is a small mechanical change; it doesn't change the implementation to handle repositories other than the_repository yet.
As with the previous commits, use a macro to catch callers passing a repository other than the_repository at compile time.
--- commit.h | 3 ++- environment.c | 2 +- git.c | 2 +- shallow.c | 2 +- 4 files changed, 5 insertions(+), 4 deletions(-)
commit.h +2 -1
@@ -199,7 +199,8 @@ extern struct commit_list *get_shallow_commits(struct object_array *heads, int depth, int shallow_flag, int not_shallow_flag);extern struct commit_list *get_shallow_commits_by_rev_list (int ac,const char **av,int shallow_flag,int not_shallow_flag); -extern void set_alternate_shallow_file (const char *path,int override); +#define set_alternate_shallow_file (r, p, o) set_alternate_shallow_file_##r(p, o) +extern void set_alternate_shallow_file_the_repository (const char *path,int override);extern int write_shallow_commits (struct strbuf *out,int use_pack_protocol,const struct oid_array *extra); extern void setup_alternate_shallow(struct lock_file *shallow_lock,
environment.c +1 -1
@@ -189,7 +189,7 @@ void setup_git_env(const char *git_dir) git_namespace =expand_namespace (getenv (GIT_NAMESPACE_ENVIRONMENT )); shallow_file =getenv (GIT_SHALLOW_FILE_ENVIRONMENT );if (shallow_file) -set_alternate_shallow_file (shallow_file,0 ); +set_alternate_shallow_file (the_repository, shallow_file,0 ); }int is_bare_repository (void )
git.c +1 -1
@@ -207,7 +207,7 @@ static int handle_options(const char ***argv, int *argc, int *envchanged) }else if (!strcmp (cmd,"--shallow-file" )) { (*argv)++; (*argc)--; -set_alternate_shallow_file ((*argv)[0 ],1 ); +set_alternate_shallow_file (the_repository, (*argv)[0 ],1 );if (envchanged) *envchanged =1 ; }else if (!strcmp (cmd,"-C" )) {
shallow.c +1 -1
@@ -19,7 +19,7 @@ static int is_shallow = -1;static struct stat_validity shallow_stat;static char *alternate_shallow_file; -void set_alternate_shallow_file (const char *path,int override) +void set_alternate_shallow_file_the_repository (const char *path,int override) {if (is_shallow !=-1 )die ("BUG: is_repository_shallow must not be called before set_alternate_shallow_file" );
Signature · 1 line
2.17.0.582.gccdcbd54c44.dirty
PATCH 9/19 shallow: add repository argument to register_shallow
In reply to Stefan BellerAdd a repository argument to allow callers of register_shallow to be more specific about which repository to handle. This is a small mechanical change; it doesn't change the implementation to handle repositories other than the_repository yet.
As with the previous commits, use a macro to catch callers passing a repository other than the_repository at compile time.
--- builtin/pack-objects.c | 2 +- builtin/receive-pack.c | 2 +- commit.h | 3 ++- fetch-pack.c | 2 +- shallow.c | 4 ++-- upload-pack.c | 7 ++++--- 6 files changed, 11 insertions(+), 9 deletions(-)
builtin/pack-objects.c +1 -1
@@ -2875,7 +2875,7 @@ static void get_object_list(int ac, const char **av)struct object_id oid;if (get_oid_hex (line +10 , &oid))die ("not an SHA-1 '%s'" , line +10 ); -register_shallow (&oid); +register_shallow (the_repository, &oid); use_bitmap_index =0 ;continue ; }
builtin/receive-pack.c +1 -1
@@ -906,7 +906,7 @@ static int update_shallow_ref(struct command *cmd, struct shallow_info *si)* not lose these new roots.. */ for (i =0 ; i < extra.nr; i++) -register_shallow (&extra.oid[i]); +register_shallow (the_repository, &extra.oid[i]); si->shallow_ref[cmd->index] =0 ;oid_array_clear (&extra);
commit.h +2 -1
@@ -191,7 +191,8 @@ extern struct commit_list *get_merge_bases_many_dirty(struct commit *one, int n,struct oid_array ;struct ref ; -extern int register_shallow (const struct object_id *oid); +#define register_shallow (r, o) register_shallow_##r(o); +extern int register_shallow_the_repository (const struct object_id *oid);extern int unregister_shallow (const struct object_id *oid);extern int for_each_commit_graft (each_commit_graft_fn ,void *);extern int is_repository_shallow (void );
fetch-pack.c +1 -1
@@ -428,7 +428,7 @@ static int find_common(struct fetch_pack_args *args,if (skip_prefix (line,"shallow " , &arg)) {if (get_oid_hex (arg, &oid))die (_ ("invalid shallow line: %s" ), line); -register_shallow (&oid); +register_shallow (the_repository, &oid);continue ; }if (skip_prefix (line,"unshallow " , &arg)) {
shallow.c +2 -2
@@ -29,7 +29,7 @@ void set_alternate_shallow_file_the_repository(const char *path, int override) alternate_shallow_file =xstrdup_or_null (path); } -int register_shallow (const struct object_id *oid) +int register_shallow_the_repository (const struct object_id *oid) {struct commit_graft *graft =xmalloc (sizeof (struct commit_graft ));
@@ -70,7 +70,7 @@ int is_repository_shallow(void)struct object_id oid;if (get_oid_hex (buf, &oid))die ("bad shallow line: %s" , buf); -register_shallow (&oid); +register_shallow (the_repository, &oid); }fclose (fp);return is_shallow;
upload-pack.c +4 -3
@@ -663,7 +663,7 @@ static void send_shallow(struct commit_list *result)if (!(object->flags & (CLIENT_SHALLOW |NOT_SHALLOW ))) {packet_write_fmt (1 ,"shallow %s" ,oid_to_hex (&object->oid)); -register_shallow (&object->oid); +register_shallow (the_repository, &object->oid); shallow_nr++; } result = result->next;
@@ -700,7 +700,7 @@ static void send_unshallow(const struct object_array *shallows)add_object_array (object,NULL , &extra_edge_obj); }/* make sure commit traversal conforms to client */ -register_shallow (&object->oid); +register_shallow (the_repository, &object->oid); } }
@@ -912,7 +912,8 @@ static void receive_needs(void)if (shallows.nr >0 ) {int i;for (i =0 ; i < shallows.nr; i++) -register_shallow (&shallows.objects[i].item->oid); +register_shallow (the_repository, + &shallows.objects[i].item->oid); } shallow_nr += shallows.nr;
Signature · 1 line
2.17.0.582.gccdcbd54c44.dirty
PATCH 10/19 shallow: add repository argument to check_shallow_file_for_update
In reply to Stefan BellerAdd a repository argument to allow callers of check_shallow_file_for_update to be more specific about which repository to handle. This is a small mechanical change; it doesn't change the implementation to handle repositories other than the_repository yet.
As with the previous commits, use a macro to catch callers passing a repository other than the_repository at compile time.
--- shallow.c | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-)
shallow.c +4 -3
@@ -217,7 +217,8 @@ struct commit_list *get_shallow_commits_by_rev_list(int ac, const char **av,return result; } -static void check_shallow_file_for_update (void ) +#define check_shallow_file_for_update (r) check_shallow_file_for_update_##r() +static void check_shallow_file_for_update_the_repository (void ) {if (is_shallow ==-1 )die ("BUG: shallow must be initialized by now" );
@@ -319,7 +320,7 @@ void setup_alternate_shallow(struct lock_file *shallow_lock, fd =hold_lock_file_for_update (shallow_lock,git_path_shallow (),LOCK_DIE_ON_ERROR ); -check_shallow_file_for_update (); +check_shallow_file_for_update (the_repository);if (write_shallow_commits (&sb,0 , extra)) {if (write_in_full (fd, sb.buf, sb.len) <0 ) die_errno("failed to write to %s",
@@ -366,7 +367,7 @@ void prune_shallow(int show_only) } fd =hold_lock_file_for_update (&shallow_lock,git_path_shallow (),LOCK_DIE_ON_ERROR ); -check_shallow_file_for_update (); +check_shallow_file_for_update (the_repository);if (write_shallow_commits_1 (&sb,0 ,NULL ,SEEN_ONLY )) {if (write_in_full (fd, sb.buf, sb.len) <0 ) die_errno("failed to write to %s",
Signature · 1 line
2.17.0.582.gccdcbd54c44.dirty
PATCH 11/19 shallow: add repository argument to is_repository_shallow
In reply to Stefan BellerAdd a repository argument to allow callers of is_repository_shallow to be more specific about which repository to handle. This is a small mechanical change; it doesn't change the implementation to handle repositories other than the_repository yet.
As with the previous commits, use a macro to catch callers passing a repository other than the_repository at compile time.
--- builtin/fetch.c | 2 +- builtin/pack-objects.c | 4 ++-- builtin/prune.c | 2 +- builtin/rev-parse.c | 3 ++- commit.c | 2 +- commit.h | 3 ++- fetch-pack.c | 4 ++-- send-pack.c | 6 +++--- shallow.c | 8 ++++---- upload-pack.c | 2 +- 10 files changed, 19 insertions(+), 17 deletions(-)
builtin/fetch.c +1 -1
@@ -1445,7 +1445,7 @@ int cmd_fetch(int argc, const char **argv, const char *prefix)if (unshallow) {if (depth)die (_ ("--depth and --unshallow cannot be used together" )); -else if (!is_repository_shallow ()) +else if (!is_repository_shallow (the_repository))die (_ ("--unshallow on a complete repository does not make sense" ));else depth =xstrfmt ("%d" ,INFINITE_DEPTH );
builtin/pack-objects.c +2 -2
@@ -2857,7 +2857,7 @@ static void get_object_list(int ac, const char **av)setup_revisions (ac, av, &revs,NULL );/* make sure shallows are read */ -is_repository_shallow (); +is_repository_shallow (the_repository);while (fgets (line,sizeof (line), stdin) !=NULL ) {int len =strlen (line);
@@ -3142,7 +3142,7 @@ int cmd_pack_objects(int argc, const char **argv, const char *prefix) use_bitmap_index = use_bitmap_index_default;/* "hard" reasons not to use bitmaps; these just won't work at all */ -if (!use_internal_rev_list || (!pack_to_stdout && write_bitmap_index) ||is_repository_shallow ()) +if (!use_internal_rev_list || (!pack_to_stdout && write_bitmap_index) ||is_repository_shallow (the_repository)) use_bitmap_index =0 ;if (pack_to_stdout || !rev_list_all)
builtin/prune.c +1 -1
@@ -160,7 +160,7 @@ int cmd_prune(int argc, const char **argv, const char *prefix)remove_temporary_files (s);free (s); -if (is_repository_shallow ()) +if (is_repository_shallow (the_repository))prune_shallow (show_only);return 0 ;
builtin/rev-parse.c +2 -1
@@ -879,7 +879,8 @@ int cmd_rev_parse(int argc, const char **argv, const char *prefix)continue ; }if (!strcmp (arg,"--is-shallow-repository" )) { -printf ("%s\n" ,is_repository_shallow () ?"true" +printf ("%s\n" , +is_repository_shallow (the_repository) ?"true" :"false" );continue ; }
commit.c +1 -1
@@ -208,7 +208,7 @@ static void prepare_commit_graft_the_repository(void) graft_file =get_graft_file ();read_graft_file (the_repository, graft_file);/* make sure shallows are read */ -is_repository_shallow (); +is_repository_shallow (the_repository); commit_graft_prepared =1 ; }
commit.h +2 -1
@@ -195,7 +195,8 @@ struct ref;extern int register_shallow_the_repository (const struct object_id *oid);extern int unregister_shallow (const struct object_id *oid);extern int for_each_commit_graft (each_commit_graft_fn ,void *); -extern int is_repository_shallow (void ); +#define is_repository_shallow (r) is_repository_shallow_##r() +extern int is_repository_shallow_the_repository (void );extern struct commit_list *get_shallow_commits (struct object_array *heads,int depth,int shallow_flag,int not_shallow_flag); extern struct commit_list *get_shallow_commits_by_rev_list(
fetch-pack.c +2 -2
@@ -397,7 +397,7 @@ static int find_common(struct fetch_pack_args *args,return 1 ; } -if (is_repository_shallow ()) +if (is_repository_shallow (the_repository))write_shallow_commits (&req_buf,1 ,NULL );if (args->depth >0 )packet_buf_write (&req_buf,"deepen %d" , args->depth);
@@ -986,7 +986,7 @@ static struct ref *do_fetch_pack(struct fetch_pack_args *args,sort_ref_list (&ref, ref_compare_name);QSORT (sought, nr_sought, cmp_ref_by_name); -if ((args->depth >0 ||is_repository_shallow ()) && !server_supports ("shallow" )) +if ((args->depth >0 ||is_repository_shallow (the_repository)) && !server_supports ("shallow" ))die (_ ("Server does not support shallow clients" ));if (args->depth >0 || args->deepen_since || args->deepen_not) args->deepen =1 ;
send-pack.c +3 -3
@@ -76,7 +76,7 @@ static int pack_objects(int fd, struct ref *refs, struct oid_array *extra, strucargv_array_push (&po.args,"-q" );if (args->progress)argv_array_push (&po.args,"--progress" ); -if (is_repository_shallow ()) +if (is_repository_shallow (the_repository))argv_array_push (&po.args,"--shallow" ); po.in =-1 ; po.out = args->stateless_rpc ?-1 : fd;
@@ -221,7 +221,7 @@ static int advertise_shallow_grafts_cb(const struct commit_graft *graft, void *cstatic void advertise_shallow_grafts_buf (struct strbuf *sb) { -if (!is_repository_shallow ()) +if (!is_repository_shallow (the_repository))return ;for_each_commit_graft (advertise_shallow_grafts_cb, sb); }
@@ -538,7 +538,7 @@ int send_pack(struct send_pack_args *args, }if (args->stateless_rpc) { -if (!args->dry_run && (cmds_sent ||is_repository_shallow ())) { +if (!args->dry_run && (cmds_sent ||is_repository_shallow (the_repository))) {packet_buf_flush (&req_buf);send_sideband (out,-1 , req_buf.buf, req_buf.len,LARGE_PACKET_MAX ); }
shallow.c +4 -4
@@ -42,7 +42,7 @@ int register_shallow_the_repository(const struct object_id *oid)return register_commit_graft (the_repository, graft,0 ); } -int is_repository_shallow (void ) +int is_repository_shallow_the_repository (void ) {FILE *fp;char buf[1024 ];
@@ -108,7 +108,7 @@ struct commit_list *get_shallow_commits(struct object_array *heads, int depth,parse_commit_or_die (commit); cur_depth++;if ((depth !=INFINITE_DEPTH && cur_depth >= depth) || - (is_repository_shallow () && !commit->parents && + (is_repository_shallow (the_repository) && !commit->parents && (graft =lookup_commit_graft (the_repository, &commit->object.oid)) !=NULL && graft->nr_parent <0 )) {commit_list_insert (commit, &result);
@@ -167,7 +167,7 @@ struct commit_list *get_shallow_commits_by_rev_list(int ac, const char **av,*/ clear_object_flags (both_flags); -is_repository_shallow ();/* make sure shallows are read */ +is_repository_shallow (the_repository);/* make sure shallows are read */ init_revisions (&revs,NULL ); save_commit_buffer =0 ;
@@ -345,7 +345,7 @@ static int advertise_shallow_grafts_cb(const struct commit_graft *graft, void *cvoid advertise_shallow_grafts (int fd) { -if (!is_repository_shallow ()) +if (!is_repository_shallow (the_repository))return ;for_each_commit_graft (advertise_shallow_grafts_cb, &fd); }
upload-pack.c +1 -1
@@ -707,7 +707,7 @@ static void send_unshallow(const struct object_array *shallows)static void deepen (int depth,int deepen_relative,struct object_array *shallows) { -if (depth ==INFINITE_DEPTH && !is_repository_shallow ()) { +if (depth ==INFINITE_DEPTH && !is_repository_shallow (the_repository)) {int i;for (i =0 ; i < shallows->nr; i++) {
Signature · 1 line
2.17.0.582.gccdcbd54c44.dirty
PATCH 12/19 commit: convert commit_graft_pos() to handle arbitrary repositories
In reply to Stefan BellerFrom: Brandon Williams <[email protected]>
--- commit.c | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-)
commit.c +3 -4
@@ -104,11 +104,10 @@ static const unsigned char *commit_graft_sha1_access(size_t index, void *table)return commit_graft_table[index]->oid.hash; } -#define commit_graft_pos (r, s) commit_graft_pos_##r(s) -static int commit_graft_pos_the_repository (const unsigned char *sha1) +static int commit_graft_pos (struct repository *r,const unsigned char *sha1) { -return sha1_pos (sha1, the_repository->parsed_objects->grafts, - the_repository->parsed_objects->grafts_nr, +return sha1_pos (sha1, r->parsed_objects->grafts, + r->parsed_objects->grafts_nr, commit_graft_sha1_access); }
Signature · 1 line
2.17.0.582.gccdcbd54c44.dirty
PATCH 13/19 commit: convert register_commit_graft to handle arbitrary repositories
In reply to Stefan BellerFrom: Brandon Williams <[email protected]>
--- commit.c | 29 +++++++++++++++-------------- commit.h | 3 +-- 2 files changed, 16 insertions(+), 16 deletions(-)
commit.c +15 -14
@@ -111,30 +111,31 @@ static int commit_graft_pos(struct repository *r, const unsigned char *sha1) commit_graft_sha1_access); } -int register_commit_graft_the_repository (struct commit_graft *graft,int ignore_dups) +int register_commit_graft (struct repository *r,struct commit_graft *graft, +int ignore_dups) { -int pos =commit_graft_pos (the_repository, graft->oid.hash); +int pos =commit_graft_pos (r, graft->oid.hash);if (0 <= pos) {if (ignore_dups)free (graft);else { -free (the_repository->parsed_objects->grafts[pos]); - the_repository->parsed_objects->grafts[pos] = graft; +free (r->parsed_objects->grafts[pos]); + r->parsed_objects->grafts[pos] = graft; }return 1 ; } pos = -pos -1 ; -ALLOC_GROW (the_repository->parsed_objects->grafts, - the_repository->parsed_objects->grafts_nr +1 , - the_repository->parsed_objects->grafts_alloc); - the_repository->parsed_objects->grafts_nr++; -if (pos < the_repository->parsed_objects->grafts_nr) -memmove (the_repository->parsed_objects->grafts + pos +1 , - the_repository->parsed_objects->grafts + pos, - (the_repository->parsed_objects->grafts_nr - pos -1 ) * -sizeof (*the_repository->parsed_objects->grafts)); - the_repository->parsed_objects->grafts[pos] = graft; +ALLOC_GROW (r->parsed_objects->grafts, + r->parsed_objects->grafts_nr +1 , + r->parsed_objects->grafts_alloc); + r->parsed_objects->grafts_nr++; +if (pos < r->parsed_objects->grafts_nr) +memmove (r->parsed_objects->grafts + pos +1 , + r->parsed_objects->grafts + pos, + (r->parsed_objects->grafts_nr - pos -1 ) * +sizeof (*r->parsed_objects->grafts)); + r->parsed_objects->grafts[pos] = graft;return 0 ; }
commit.h +1 -2
@@ -174,8 +174,7 @@ struct commit_graft {typedef int (*each_commit_graft_fn )(const struct commit_graft *,void *);struct commit_graft *read_graft_line (struct strbuf *line); -#define register_commit_graft (r, g, i) register_commit_graft_##r(g, i) -int register_commit_graft_the_repository (struct commit_graft *,int ); +int register_commit_graft (struct repository *r,struct commit_graft *,int );#define lookup_commit_graft (r, o) lookup_commit_graft_##r(o)struct commit_graft *lookup_commit_graft_the_repository (const struct object_id *oid);
Signature · 1 line
2.17.0.582.gccdcbd54c44.dirty
PATCH 14/19 commit: convert read_graft_file to handle arbitrary repositories
In reply to Stefan BellerFrom: Brandon Williams <[email protected]>
--- commit.c | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-)
commit.c +2 -3
@@ -177,8 +177,7 @@ struct commit_graft *read_graft_line(struct strbuf *line)return NULL ; } -#define read_graft_file (r, f) read_graft_file_##r(f) -static int read_graft_file_the_repository (const char *graft_file) +static int read_graft_file (struct repository *r,const char *graft_file) {FILE *fp =fopen_or_warn (graft_file,"r" );struct strbuf buf =STRBUF_INIT ;
@@ -189,7 +188,7 @@ static int read_graft_file_the_repository(const char *graft_file)struct commit_graft *graft =read_graft_line (&buf);if (!graft)continue ; -if (register_commit_graft (the_repository, graft,1 )) +if (register_commit_graft (r, graft,1 ))error ("duplicate graft data: %s" , buf.buf); }fclose (fp);
Signature · 1 line
2.17.0.582.gccdcbd54c44.dirty
PATCH 15/19 cache: convert get_graft_file to handle arbitrary repositories
In reply to Stefan BellerThis conversion was done without the #define trick used in the earlier series refactoring to have better repository access, because this function is easy to review, as all lines are converted and it has only one caller.
--- cache.h | 2 +- commit.c | 2 +- environment.c | 6 +++--- 3 files changed, 5 insertions(+), 5 deletions(-)
cache.h +1 -1
@@ -476,7 +476,7 @@ extern const char *get_git_dir(void);extern const char *get_git_common_dir (void );extern char *get_object_directory (void );extern char *get_index_file (void ); -extern char *get_graft_file (void ); +extern char *get_graft_file (struct repository *r);extern int set_git_dir (const char *path);extern int get_common_dir_noenv (struct strbuf *sb,const char *gitdir);extern int get_common_dir (struct strbuf *sb,const char *gitdir);
commit.c +1 -1
@@ -204,7 +204,7 @@ static void prepare_commit_graft_the_repository(void)if (commit_graft_prepared)return ; - graft_file =get_graft_file (); + graft_file =get_graft_file (the_repository);read_graft_file (the_repository, graft_file);/* make sure shallows are read */ is_repository_shallow (the_repository);
environment.c +3 -3
@@ -316,11 +316,11 @@ char *get_index_file(void)return the_repository->index_file; } -char *get_graft_file (void ) +char *get_graft_file (struct repository *r) { -if (!the_repository->graft_file) +if (!r->graft_file)BUG ("git environment hasn't been setup" ); -return the_repository->graft_file; +return r->graft_file; }int set_git_dir (const char *path)
Signature · 1 line
2.17.0.582.gccdcbd54c44.dirty
PATCH 16/19 path.c: migrate global git_path_* to take a repository argument
In reply to Stefan BellerMigrate all git_path_* functions that are defined in path.c to take a repository argument. Unlike other patches in this series, do not use the
#define trick, as we rewrite the whole function, which is rather small.
This doesn't migrate all the functions, as other builtins have their own local path functions defined using GIT_PATH_FUNC. So keep that macro around to serve the other locations.
--- blame.c | 8 +++++--- branch.c | 14 +++++++------- builtin/commit.c | 38 +++++++++++++++++++------------------- builtin/fetch.c | 4 ++-- builtin/merge.c | 37 +++++++++++++++++++------------------ builtin/pull.c | 4 ++-- builtin/reset.c | 2 +- fetch-pack.c | 2 +- path.c | 18 +++++++++--------- path.h | 40 +++++++++++++++++++++++++++++++--------- repository.h | 5 +++++ rerere.c | 7 ++++--- sequencer.c | 37 +++++++++++++++++++------------------ shallow.c | 12 +++++++----- wt-status.c | 8 ++++---- 15 files changed, 135 insertions(+), 101 deletions(-)
blame.c +5 -3
@@ -112,17 +112,19 @@ static void append_merge_parents(struct commit_list **tail)int merge_head;struct strbuf line =STRBUF_INIT ; - merge_head =open (git_path_merge_head (),O_RDONLY ); + merge_head =open (git_path_merge_head (the_repository),O_RDONLY );if (merge_head <0 ) {if (errno ==ENOENT )return ; -die ("cannot open '%s' for reading" ,git_path_merge_head ()); +die ("cannot open '%s' for reading" , +git_path_merge_head (the_repository)); }while (!strbuf_getwholeline_fd (&line, merge_head,'\n' )) {struct object_id oid;if (line.len <GIT_SHA1_HEXSZ ||get_oid_hex (line.buf, &oid)) -die ("unknown line in '%s': %s" ,git_path_merge_head (), line.buf); +die ("unknown line in '%s': %s" , +git_path_merge_head (the_repository), line.buf); tail =append_parent (tail, &oid); }close (merge_head);
branch.c +7 -7
@@ -339,13 +339,13 @@ void create_branch(const char *name, const char *start_name,void remove_branch_state (void ) { -unlink (git_path_cherry_pick_head ()); -unlink (git_path_revert_head ()); -unlink (git_path_merge_head ()); -unlink (git_path_merge_rr ()); -unlink (git_path_merge_msg ()); -unlink (git_path_merge_mode ()); -unlink (git_path_squash_msg ()); +unlink (git_path_cherry_pick_head (the_repository)); +unlink (git_path_revert_head (the_repository)); +unlink (git_path_merge_head (the_repository)); +unlink (git_path_merge_rr (the_repository)); +unlink (git_path_merge_msg (the_repository)); +unlink (git_path_merge_mode (the_repository)); +unlink (git_path_squash_msg (the_repository)); }void die_if_checked_out (const char *branch,int ignore_current_worktree)
builtin/commit.c +19 -19
@@ -145,9 +145,9 @@ static int opt_parse_m(const struct option *opt, const char *arg, int unset)static void determine_whence (struct wt_status *s) { -if (file_exists (git_path_merge_head ())) +if (file_exists (git_path_merge_head (the_repository))) whence =FROM_MERGE ; -else if (file_exists (git_path_cherry_pick_head ())) { +else if (file_exists (git_path_cherry_pick_head (the_repository))) { whence =FROM_CHERRY_PICK ;if (file_exists (git_path_seq_dir ())) sequencer_in_use =1 ;
@@ -696,21 +696,21 @@ static int prepare_to_commit(const char *index_file, const char *prefix,if (have_option_m)strbuf_addbuf (&sb, &message); hook_arg1 ="message" ; - }else if (!stat (git_path_merge_msg (), &statbuf)) { + }else if (!stat (git_path_merge_msg (the_repository), &statbuf)) {/* * prepend SQUASH_MSG here if it exists and a * "merge --squash" was originally performed */ -if (!stat (git_path_squash_msg (), &statbuf)) { -if (strbuf_read_file (&sb,git_path_squash_msg (),0 ) <0 ) +if (!stat (git_path_squash_msg (the_repository), &statbuf)) { +if (strbuf_read_file (&sb,git_path_squash_msg (the_repository),0 ) <0 )die_errno (_ ("could not read SQUASH_MSG" )); hook_arg1 ="squash" ; }else hook_arg1 ="merge" ; -if (strbuf_read_file (&sb,git_path_merge_msg (),0 ) <0 ) +if (strbuf_read_file (&sb,git_path_merge_msg (the_repository),0 ) <0 )die_errno (_ ("could not read MERGE_MSG" )); - }else if (!stat (git_path_squash_msg (), &statbuf)) { -if (strbuf_read_file (&sb,git_path_squash_msg (),0 ) <0 ) + }else if (!stat (git_path_squash_msg (the_repository), &statbuf)) { +if (strbuf_read_file (&sb,git_path_squash_msg (the_repository),0 ) <0 )die_errno (_ ("could not read SQUASH_MSG" )); hook_arg1 ="squash" ; }else if (template_file) {
@@ -791,8 +791,8 @@ static int prepare_to_commit(const char *index_file, const char *prefix," %s\n" "and try again.\n"), whence ==FROM_MERGE ? -git_path_merge_head () : - git_path_cherry_pick_head()); +git_path_merge_head (the_repository) : + git_path_cherry_pick_head(the_repository)); }fprintf (s->fp,"\n" );
@@ -1523,7 +1523,7 @@ int cmd_commit(int argc, const char **argv, const char *prefix)if (!reflog_msg) reflog_msg ="commit (merge)" ; pptr =commit_list_append (current_head, pptr); - fp =xfopen (git_path_merge_head (),"r" ); + fp =xfopen (git_path_merge_head (the_repository),"r" );while (strbuf_getline_lf (&m, fp) !=EOF ) {struct commit *parent;
@@ -1534,8 +1534,8 @@ int cmd_commit(int argc, const char **argv, const char *prefix) }fclose (fp);strbuf_release (&m); -if (!stat (git_path_merge_mode (), &statbuf)) { -if (strbuf_read_file (&sb,git_path_merge_mode (),0 ) <0 ) +if (!stat (git_path_merge_mode (the_repository), &statbuf)) { +if (strbuf_read_file (&sb,git_path_merge_mode (the_repository),0 ) <0 )die_errno (_ ("could not read MERGE_MODE" ));if (!strcmp (sb.buf,"no-ff" )) allow_fast_forward =0 ;
@@ -1598,12 +1598,12 @@ int cmd_commit(int argc, const char **argv, const char *prefix)die ("%s" , err.buf); } -unlink (git_path_cherry_pick_head ()); -unlink (git_path_revert_head ()); -unlink (git_path_merge_head ()); -unlink (git_path_merge_msg ()); -unlink (git_path_merge_mode ()); -unlink (git_path_squash_msg ()); +unlink (git_path_cherry_pick_head (the_repository)); +unlink (git_path_revert_head (the_repository)); +unlink (git_path_merge_head (the_repository)); +unlink (git_path_merge_msg (the_repository)); +unlink (git_path_merge_mode (the_repository)); +unlink (git_path_squash_msg (the_repository));if (commit_index_files ()) die (_("Repository has been updated, but unable to write\n"
builtin/fetch.c +2 -2
@@ -767,7 +767,7 @@ static int store_updated_refs(const char *raw_url, const char *remote_name,const char *what, *kind;struct ref *rm;char *url; -const char *filename = dry_run ?"/dev/null" :git_path_fetch_head (); +const char *filename = dry_run ?"/dev/null" :git_path_fetch_head (the_repository);int want_status;int summary_width =transport_summary_width (ref_map);
@@ -1019,7 +1019,7 @@ static void check_not_current_branch(struct ref *ref_map)static int truncate_fetch_head (void ) { -const char *filename =git_path_fetch_head (); +const char *filename =git_path_fetch_head (the_repository);FILE *fp =fopen_for_writing (filename);if (!fp)
builtin/merge.c +19 -18
@@ -245,9 +245,9 @@ static struct option builtin_merge_options[] = {/* Cleans up metadata that is uninteresting after a succeeded merge. */ static void drop_save (void ) { -unlink (git_path_merge_head ()); -unlink (git_path_merge_msg ()); -unlink (git_path_merge_mode ()); +unlink (git_path_merge_head (the_repository)); +unlink (git_path_merge_msg (the_repository)); +unlink (git_path_merge_mode (the_repository)); }static int save_state (struct object_id *stash)
@@ -380,7 +380,7 @@ static void squash_message(struct commit *commit, struct commit_list *remotehead oid_to_hex(&commit->object.oid));pretty_print_commit (&ctx, commit, &out); } -write_file_buf (git_path_squash_msg (), out.buf, out.len); +write_file_buf (git_path_squash_msg (the_repository), out.buf, out.len);strbuf_release (&out); }
@@ -741,7 +741,7 @@ static void add_strategies(const char *string, unsigned attr)static void read_merge_msg (struct strbuf *msg) { -const char *filename =git_path_merge_msg (); +const char *filename =git_path_merge_msg (the_repository);strbuf_reset (msg);if (strbuf_read_file (msg, filename,0 ) <0 )die_errno (_ ("Could not read from '%s'" ), filename);
@@ -778,18 +778,18 @@ static void prepare_to_commit(struct commit_list *remoteheads)if (signoff)append_signoff (&msg,ignore_non_trailer (msg.buf, msg.len),0 );write_merge_heads (remoteheads); -write_file_buf (git_path_merge_msg (), msg.buf, msg.len); +write_file_buf (git_path_merge_msg (the_repository), msg.buf, msg.len);if (run_commit_hook (0 < option_edit,get_index_file (),"prepare-commit-msg" , -git_path_merge_msg (),"merge" ,NULL )) +git_path_merge_msg (the_repository),"merge" ,NULL ))abort_commit (remoteheads,NULL );if (0 < option_edit) { -if (launch_editor (git_path_merge_msg (),NULL ,NULL )) +if (launch_editor (git_path_merge_msg (the_repository),NULL ,NULL ))abort_commit (remoteheads,NULL ); }if (verify_msg &&run_commit_hook (0 < option_edit,get_index_file (),"commit-msg" , -git_path_merge_msg (),NULL )) +git_path_merge_msg (the_repository),NULL ))abort_commit (remoteheads,NULL );read_merge_msg (&msg);
@@ -859,7 +859,7 @@ static int suggest_conflicts(void)FILE *fp;struct strbuf msgbuf =STRBUF_INIT ; - filename =git_path_merge_msg (); + filename =git_path_merge_msg (the_repository); fp =xfopen (filename,"a" );append_conflicts_hint (&msgbuf);
@@ -939,12 +939,12 @@ static void write_merge_heads(struct commit_list *remoteheads) }strbuf_addf (&buf,"%s\n" ,oid_to_hex (oid)); } -write_file_buf (git_path_merge_head (), buf.buf, buf.len); +write_file_buf (git_path_merge_head (the_repository), buf.buf, buf.len);strbuf_reset (&buf);if (fast_forward ==FF_NO )strbuf_addstr (&buf,"no-ff" ); -write_file_buf (git_path_merge_mode (), buf.buf, buf.len); +write_file_buf (git_path_merge_mode (the_repository), buf.buf, buf.len);strbuf_release (&buf); }
@@ -952,7 +952,8 @@ static void write_merge_state(struct commit_list *remoteheads) {write_merge_heads (remoteheads);strbuf_addch (&merge_msg,'\n' ); -write_file_buf (git_path_merge_msg (), merge_msg.buf, merge_msg.len); +write_file_buf (git_path_merge_msg (the_repository), merge_msg.buf, + merge_msg.len); }static int default_edit_option (void )
@@ -1035,7 +1036,7 @@ static void handle_fetch_head(struct commit_list **remotes, struct strbuf *mergeif (!merge_names) merge_names = &fetch_head_file; - filename =git_path_fetch_head (); + filename =git_path_fetch_head (the_repository); fd =open (filename,O_RDONLY );if (fd <0 )die_errno (_ ("could not open '%s' for reading" ), filename);
@@ -1209,7 +1210,7 @@ int cmd_merge(int argc, const char **argv, const char *prefix)usage_msg_opt (_ ("--abort expects no arguments" ), builtin_merge_usage, builtin_merge_options); -if (!file_exists (git_path_merge_head ())) +if (!file_exists (git_path_merge_head (the_repository)))die (_ ("There is no merge to abort (MERGE_HEAD missing)." ));/* Invoke 'git reset --merge' */
@@ -1225,7 +1226,7 @@ int cmd_merge(int argc, const char **argv, const char *prefix)usage_msg_opt (_ ("--continue expects no arguments" ), builtin_merge_usage, builtin_merge_options); -if (!file_exists (git_path_merge_head ())) +if (!file_exists (git_path_merge_head (the_repository)))die (_ ("There is no merge in progress (MERGE_HEAD missing)." ));/* Invoke 'git commit' */
@@ -1236,7 +1237,7 @@ int cmd_merge(int argc, const char **argv, const char *prefix)if (read_cache_unmerged ())die_resolve_conflict ("merge" ); -if (file_exists (git_path_merge_head ())) { +if (file_exists (git_path_merge_head (the_repository))) {/* * There is no unmerged entry, don't advise 'git * add/rm <file>', just 'git commit'.
@@ -1247,7 +1248,7 @@ int cmd_merge(int argc, const char **argv, const char *prefix)else die (_ ("You have not concluded your merge (MERGE_HEAD exists)." )); } -if (file_exists (git_path_cherry_pick_head ())) { +if (file_exists (git_path_cherry_pick_head (the_repository))) {if (advice_resolve_conflict)die (_ ("You have not concluded your cherry-pick (CHERRY_PICK_HEAD exists).\n" "Please, commit your changes before you merge." ));
builtin/pull.c +2 -2
@@ -351,7 +351,7 @@ static int git_pull_config(const char *var, const char *value, void *cb)*/ static void get_merge_heads (struct oid_array *merge_heads) { -const char *filename =git_path_fetch_head (); +const char *filename =git_path_fetch_head (the_repository);FILE *fp;struct strbuf sb =STRBUF_INIT ;struct object_id oid;
@@ -857,7 +857,7 @@ int cmd_pull(int argc, const char **argv, const char *prefix)if (read_cache_unmerged ())die_resolve_conflict ("pull" ); -if (file_exists (git_path_merge_head ())) +if (file_exists (git_path_merge_head (the_repository)))die_conclude_merge ();if (get_oid ("HEAD" , &orig_head))
builtin/reset.c +1 -1
@@ -39,7 +39,7 @@ static const char *reset_type_names[] = {static inline int is_merge (void ) { -return !access (git_path_merge_head (),F_OK ); +return !access (git_path_merge_head (the_repository),F_OK ); }static int reset_index (const struct object_id *oid,int reset_type,int quiet)
fetch-pack.c +1 -1
@@ -1136,7 +1136,7 @@ static void update_shallow(struct fetch_pack_args *args,if (args->deepen && alternate_shallow_file) {if (*alternate_shallow_file =='\0' ) {/* --unshallow */ -unlink_or_warn (git_path_shallow ()); +unlink_or_warn (git_path_shallow (the_repository));rollback_lock_file (&shallow_lock); }else commit_lock_file (&shallow_lock);
path.c +9 -9
@@ -1358,12 +1358,12 @@ char *xdg_cache_home(const char *filename)return NULL ; } -GIT_PATH_FUNC(git_path_cherry_pick_head, "CHERRY_PICK_HEAD") -GIT_PATH_FUNC(git_path_revert_head, "REVERT_HEAD") -GIT_PATH_FUNC(git_path_squash_msg, "SQUASH_MSG") -GIT_PATH_FUNC(git_path_merge_msg, "MERGE_MSG") -GIT_PATH_FUNC(git_path_merge_rr, "MERGE_RR") -GIT_PATH_FUNC(git_path_merge_mode, "MERGE_MODE") -GIT_PATH_FUNC(git_path_merge_head, "MERGE_HEAD") -GIT_PATH_FUNC(git_path_fetch_head, "FETCH_HEAD") -GIT_PATH_FUNC (git_path_shallow,"shallow" ) +REPO_GIT_PATH_FUNC(cherry_pick_head, "CHERRY_PICK_HEAD") +REPO_GIT_PATH_FUNC(revert_head, "REVERT_HEAD") +REPO_GIT_PATH_FUNC(squash_msg, "SQUASH_MSG") +REPO_GIT_PATH_FUNC(merge_msg, "MERGE_MSG") +REPO_GIT_PATH_FUNC(merge_rr, "MERGE_RR") +REPO_GIT_PATH_FUNC(merge_mode, "MERGE_MODE") +REPO_GIT_PATH_FUNC(merge_head, "MERGE_HEAD") +REPO_GIT_PATH_FUNC(fetch_head, "FETCH_HEAD") +REPO_GIT_PATH_FUNC (shallow,"shallow" )
path.h +31 -9
@@ -160,14 +160,36 @@ extern void report_linked_checkout_garbage(void);return ret; \ } -const char *git_path_cherry_pick_head (void ); -const char *git_path_revert_head (void ); -const char *git_path_squash_msg (void ); -const char *git_path_merge_msg (void ); -const char *git_path_merge_rr (void ); -const char *git_path_merge_mode (void ); -const char *git_path_merge_head (void ); -const char *git_path_fetch_head (void ); -const char *git_path_shallow (void ); +#define REPO_GIT_PATH_FUNC (var, filename) \ + const char *git_path_##var(struct repository *r) \ + { \ + if (!r->cached_paths.var) \ + r->cached_paths.var = git_pathdup(filename); \ + return r->cached_paths.var; \ + } + +struct path_cache { +const char *cherry_pick_head; +const char *revert_head; +const char *squash_msg; +const char *merge_msg; +const char *merge_rr; +const char *merge_mode; +const char *merge_head; +const char *fetch_head; +const char *shallow; +}; + +#define PATH_CACHE_INIT { NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL } + +const char *git_path_cherry_pick_head (struct repository *r); +const char *git_path_revert_head (struct repository *r); +const char *git_path_squash_msg (struct repository *r); +const char *git_path_merge_msg (struct repository *r); +const char *git_path_merge_rr (struct repository *r); +const char *git_path_merge_mode (struct repository *r); +const char *git_path_merge_head (struct repository *r); +const char *git_path_fetch_head (struct repository *r); +const char *git_path_shallow (struct repository *r);#endif /* PATH_H */
repository.h +5 -0
@@ -38,6 +38,11 @@ struct repository {/* The store in which the refs are held. */ struct ref_store *refs; +/* +* Contains path to often used file names. +*/ +struct path_cache cached_paths; +/* * Path to the repository's graft file. * Cannot be NULL after initialization.
rerere.c +4 -3
@@ -201,7 +201,7 @@ static struct rerere_id *new_rerere_id(unsigned char *sha1)static void read_rr (struct string_list *rr) {struct strbuf buf =STRBUF_INIT ; -FILE *in =fopen_or_warn (git_path_merge_rr (),"r" ); +FILE *in =fopen_or_warn (git_path_merge_rr (the_repository),"r" );if (!in)return ;
@@ -897,7 +897,8 @@ int setup_rerere(struct string_list *merge_rr, int flags)if (flags &RERERE_READONLY ) fd =0 ;else - fd =hold_lock_file_for_update (&write_lock,git_path_merge_rr (), + fd =hold_lock_file_for_update (&write_lock, +git_path_merge_rr (the_repository),LOCK_DIE_ON_ERROR );read_rr (merge_rr);return fd;
@@ -1247,6 +1248,6 @@ void rerere_clear(struct string_list *merge_rr)rmdir (rerere_path (id,NULL )); } } -unlink_or_warn (git_path_merge_rr ()); +unlink_or_warn (git_path_merge_rr (the_repository));rollback_lock_file (&write_lock); }
sequencer.c +19 -18
@@ -322,7 +322,7 @@ static void print_advice(int show_hint, struct replay_opts *opts)* (typically rebase --interactive) wants to take care * of the commit itself so remove CHERRY_PICK_HEAD */ -unlink (git_path_cherry_pick_head ()); +unlink (git_path_cherry_pick_head (the_repository));return ; }
@@ -1191,8 +1191,8 @@ static int do_commit(const char *msg_file, const char *author, &oid);strbuf_release (&sb);if (!res) { -unlink (git_path_cherry_pick_head ()); -unlink (git_path_merge_msg ()); +unlink (git_path_cherry_pick_head (the_repository)); +unlink (git_path_merge_msg (the_repository));if (!is_rebase_i (opts))print_commit_summary (NULL , &oid,SUMMARY_SHOW_AUTHOR_DATE );
@@ -1459,7 +1459,7 @@ static int do_pick_commit(enum todo_command command, struct commit *commit, struct replay_opts *opts, int final_fixup) {unsigned int flags = opts->edit ?EDIT_MSG :0 ; -const char *msg_file = opts->edit ?NULL :git_path_merge_msg (); +const char *msg_file = opts->edit ?NULL :git_path_merge_msg (the_repository);struct object_id head;struct commit *base, *next, *parent;const char *base_label, *next_label;
@@ -1594,12 +1594,12 @@ static int do_pick_commit(enum todo_command command, struct commit *commit, flags |=CLEANUP_MSG ; msg_file =rebase_path_fixup_msg (); }else { -const char *dest =git_path_squash_msg (); +const char *dest =git_path_squash_msg (the_repository);unlink (dest);if (copy_file (dest,rebase_path_squash_msg (),0666 ))return error (_ ("could not rename '%s' to '%s'" ),rebase_path_squash_msg (), dest); -unlink (git_path_merge_msg ()); +unlink (git_path_merge_msg (the_repository)); msg_file = dest; flags |=EDIT_MSG ; }
@@ -1616,13 +1616,13 @@ static int do_pick_commit(enum todo_command command, struct commit *commit,if (res <0 )return res; res |=write_message (msgbuf.buf, msgbuf.len, -git_path_merge_msg (),0 ); +git_path_merge_msg (the_repository),0 ); }else {struct commit_list *common =NULL ;struct commit_list *remotes =NULL ; res =write_message (msgbuf.buf, msgbuf.len, -git_path_merge_msg (),0 ); +git_path_merge_msg (the_repository),0 );commit_list_insert (base, &common);commit_list_insert (next, &remotes);
@@ -2168,8 +2168,8 @@ static int rollback_single_pick(void) {struct object_id head_oid; -if (!file_exists (git_path_cherry_pick_head ()) && - !file_exists (git_path_revert_head ())) +if (!file_exists (git_path_cherry_pick_head (the_repository)) && + !file_exists (git_path_revert_head (the_repository)))return error (_ ("no cherry-pick or revert in progress" ));if (read_ref_full ("HEAD" ,0 , &head_oid,NULL ))return error (_ ("cannot resolve HEAD" ));
@@ -2397,10 +2397,11 @@ static int error_failed_squash(struct commit *commit,return error (_ ("could not rename '%s' to '%s'" ),rebase_path_squash_msg (),rebase_path_message ());unlink (rebase_path_fixup_msg ()); -unlink (git_path_merge_msg ()); -if (copy_file (git_path_merge_msg (),rebase_path_message (),0666 )) +unlink (git_path_merge_msg (the_repository)); +if (copy_file (git_path_merge_msg (the_repository),rebase_path_message (),0666 ))return error (_ ("could not copy '%s' to '%s'" ), -rebase_path_message (),git_path_merge_msg ()); +rebase_path_message (), +git_path_merge_msg (the_repository));return error_with_patch (commit, subject, subject_len, opts,1 ,0 ); }
@@ -2756,8 +2757,8 @@ static int continue_single_pick(void) {const char *argv[] = {"commit" ,NULL }; -if (!file_exists (git_path_cherry_pick_head ()) && - !file_exists (git_path_revert_head ())) +if (!file_exists (git_path_cherry_pick_head (the_repository)) && + !file_exists (git_path_revert_head (the_repository)))return error (_ ("no cherry-pick or revert in progress" ));return run_command_v_opt (argv,RUN_GIT_CMD ); }
@@ -2769,7 +2770,7 @@ static int commit_staged_changes(struct replay_opts *opts)if (has_unstaged_changes (1 ))return error (_ ("cannot rebase: You have unstaged changes." ));if (!has_uncommitted_changes (0 )) { -const char *cherry_pick_head =git_path_cherry_pick_head (); +const char *cherry_pick_head =git_path_cherry_pick_head (the_repository);if (file_exists (cherry_pick_head) &&unlink (cherry_pick_head))return error (_ ("could not remove CHERRY_PICK_HEAD" ));
@@ -2823,8 +2824,8 @@ int sequencer_continue(struct replay_opts *opts)if (!is_rebase_i (opts)) {/* Verify that the conflict has been resolved */ -if (file_exists (git_path_cherry_pick_head ()) || -file_exists (git_path_revert_head ())) { +if (file_exists (git_path_cherry_pick_head (the_repository)) || +file_exists (git_path_revert_head (the_repository))) { res =continue_single_pick ();if (res) goto release_todo_list;
shallow.c +7 -5
@@ -52,7 +52,7 @@ int is_repository_shallow_the_repository(void)return is_shallow;if (!path) - path =git_path_shallow (); + path =git_path_shallow (the_repository);/* * fetch-pack sets '--shallow-file ""' as an indicator that no * shallow file should be used. We could just open it and it
@@ -223,7 +223,7 @@ static void check_shallow_file_for_update_the_repository(void)if (is_shallow ==-1 )die ("BUG: shallow must be initialized by now" ); -if (!stat_validity_check (&shallow_stat,git_path_shallow ())) +if (!stat_validity_check (&shallow_stat,git_path_shallow (the_repository)))die ("shallow file has changed since we read it" ); }
@@ -318,7 +318,8 @@ void setup_alternate_shallow(struct lock_file *shallow_lock,struct strbuf sb =STRBUF_INIT ;int fd; - fd =hold_lock_file_for_update (shallow_lock,git_path_shallow (), + fd =hold_lock_file_for_update (shallow_lock, +git_path_shallow (the_repository),LOCK_DIE_ON_ERROR );check_shallow_file_for_update (the_repository);if (write_shallow_commits (&sb,0 , extra)) {
@@ -365,7 +366,8 @@ void prune_shallow(int show_only)strbuf_release (&sb);return ; } - fd =hold_lock_file_for_update (&shallow_lock,git_path_shallow (), + fd =hold_lock_file_for_update (&shallow_lock, +git_path_shallow (the_repository),LOCK_DIE_ON_ERROR );check_shallow_file_for_update (the_repository);if (write_shallow_commits_1 (&sb,0 ,NULL ,SEEN_ONLY )) {
@@ -374,7 +376,7 @@ void prune_shallow(int show_only) get_lock_file_path(&shallow_lock));commit_lock_file (&shallow_lock); }else { -unlink (git_path_shallow ()); +unlink (git_path_shallow (the_repository));rollback_lock_file (&shallow_lock); }strbuf_release (&sb);
wt-status.c +4 -4
@@ -1309,7 +1309,7 @@ static void show_rebase_in_progress(struct wt_status *s,status_printf_ln (s, color,_ (" (use \"git rebase --abort\" to check out the original branch)" )); } - }else if (state->rebase_in_progress || !stat (git_path_merge_msg (), &st)) { + }else if (state->rebase_in_progress || !stat (git_path_merge_msg (the_repository), &st)) {print_rebase_state (s, state, color);if (s->hints) status_printf_ln(s, color,
@@ -1544,17 +1544,17 @@ void wt_status_get_state(struct wt_status_state *state,struct stat st;struct object_id oid; -if (!stat (git_path_merge_head (), &st)) { +if (!stat (git_path_merge_head (the_repository), &st)) { state->merge_in_progress =1 ; }else if (wt_status_check_rebase (NULL , state)) { ;/* all set */ - }else if (!stat (git_path_cherry_pick_head (), &st) && + }else if (!stat (git_path_cherry_pick_head (the_repository), &st) && !get_oid ("CHERRY_PICK_HEAD" , &oid)) { state->cherry_pick_in_progress =1 ;oidcpy (&state->cherry_pick_head_oid, &oid); }wt_status_check_bisect (NULL , state); -if (!stat (git_path_revert_head (), &st) && +if (!stat (git_path_revert_head (the_repository), &st) && !get_oid ("REVERT_HEAD" , &oid)) { state->revert_in_progress =1 ;oidcpy (&state->revert_head_oid, &oid);
Signature · 1 line
2.17.0.582.gccdcbd54c44.dirty
PATCH 17/19 shallow: migrate shallow information into the object parser
In reply to Stefan BellerWe need to convert the shallow functions all at the same time as we move the data structures they operate on into the repository.
--- commit.h | 9 +++------ object.c | 3 +++ object.h | 4 ++++ shallow.c | 50 +++++++++++++++++++++++--------------------------- 4 files changed, 33 insertions(+), 33 deletions(-)
commit.h +3 -6
@@ -190,18 +190,15 @@ extern struct commit_list *get_merge_bases_many_dirty(struct commit *one, int n,struct oid_array ;struct ref ; -#define register_shallow (r, o) register_shallow_##r(o); -extern int register_shallow_the_repository (const struct object_id *oid); +extern int register_shallow (struct repository *r,const struct object_id *oid);extern int unregister_shallow (const struct object_id *oid);extern int for_each_commit_graft (each_commit_graft_fn ,void *); -#define is_repository_shallow (r) is_repository_shallow_##r() -extern int is_repository_shallow_the_repository (void ); +extern int is_repository_shallow (struct repository *r);extern struct commit_list *get_shallow_commits (struct object_array *heads,int depth,int shallow_flag,int not_shallow_flag);extern struct commit_list *get_shallow_commits_by_rev_list (int ac,const char **av,int shallow_flag,int not_shallow_flag); -#define set_alternate_shallow_file (r, p, o) set_alternate_shallow_file_##r(p, o) -extern void set_alternate_shallow_file_the_repository (const char *path,int override); +extern void set_alternate_shallow_file (struct repository *r,const char *path,int override);extern int write_shallow_commits (struct strbuf *out,int use_pack_protocol,const struct oid_array *extra); extern void setup_alternate_shallow(struct lock_file *shallow_lock,
object.c +3 -0
@@ -464,6 +464,9 @@ struct parsed_object_pool *parsed_object_pool_new(void) o->tag_state =allocate_alloc_state (); o->object_state =allocate_alloc_state (); + o->is_shallow =-1 ; + o->shallow_stat =xcalloc (1 ,sizeof (*o->shallow_stat)); +return o; }
object.h +4 -0
@@ -16,6 +16,10 @@ struct parsed_object_pool {/* parent substitutions from .git/info/grafts and .git/shallow */ struct commit_graft **grafts;int grafts_alloc, grafts_nr; + +int is_shallow; +struct stat_validity *shallow_stat; +char *alternate_shallow_file; };struct parsed_object_pool *parsed_object_pool_new (void );
shallow.c +23 -27
99 lines not on this page · raw message
Signature · 1 line
2.17.0.582.gccdcbd54c44.dirty
PATCH 18/19 commit: allow prepare_commit_graft to handle arbitrary repositories
In reply to Stefan BellerMove the global variable 'commit_graft_prepared' into the object pool and convert the function prepare_commit_graft to work an arbitrary repositories.
--- commit.c | 14 ++++++-------- object.h | 2 ++ 2 files changed, 8 insertions(+), 8 deletions(-)
commit.c +6 -8
@@ -196,19 +196,17 @@ static int read_graft_file(struct repository *r, const char *graft_file)return 0 ; } -#define prepare_commit_graft (r) prepare_commit_graft_##r() -static void prepare_commit_graft_the_repository (void ) +static void prepare_commit_graft (struct repository *r) { -static int commit_graft_prepared;char *graft_file; -if (commit_graft_prepared) +if (r->parsed_objects->commit_graft_prepared)return ; - graft_file =get_graft_file (the_repository); -read_graft_file (the_repository, graft_file); + graft_file =get_graft_file (r); +read_graft_file (r, graft_file);/* make sure shallows are read */ -is_repository_shallow (the_repository); - commit_graft_prepared =1 ; +is_repository_shallow (r); + r->parsed_objects->commit_graft_prepared =1 ; }struct commit_graft *lookup_commit_graft_the_repository (const struct object_id *oid)
object.h +2 -0
@@ -20,6 +20,8 @@ struct parsed_object_pool {int is_shallow;struct stat_validity *shallow_stat;char *alternate_shallow_file; + +int commit_graft_prepared; };struct parsed_object_pool *parsed_object_pool_new (void );
Signature · 1 line
2.17.0.582.gccdcbd54c44.dirty
PATCH 19/19 commit: allow lookup_commit_graft to handle arbitrary repositories
In reply to Stefan Beller--- commit.c | 8 ++++---- commit.h | 3 +-- 2 files changed, 5 insertions(+), 6 deletions(-)
commit.c +4 -4
@@ -209,14 +209,14 @@ static void prepare_commit_graft(struct repository *r) r->parsed_objects->commit_graft_prepared =1 ; } -struct commit_graft *lookup_commit_graft_the_repository (const struct object_id *oid) +struct commit_graft *lookup_commit_graft (struct repository *r,const struct object_id *oid) {int pos; -prepare_commit_graft (the_repository); - pos =commit_graft_pos (the_repository, oid->hash); +prepare_commit_graft (r); + pos =commit_graft_pos (r, oid->hash);if (pos <0 )return NULL ; -return the_repository->parsed_objects->grafts[pos]; +return r->parsed_objects->grafts[pos]; }int for_each_commit_graft (each_commit_graft_fn fn,void *cb_data)
commit.h +1 -2
@@ -175,8 +175,7 @@ typedef int (*each_commit_graft_fn)(const struct commit_graft *, void *);struct commit_graft *read_graft_line (struct strbuf *line);int register_commit_graft (struct repository *r,struct commit_graft *,int ); -#define lookup_commit_graft (r, o) lookup_commit_graft_##r(o) -struct commit_graft *lookup_commit_graft_the_repository (const struct object_id *oid); +struct commit_graft *lookup_commit_graft (struct repository *r,const struct object_id *oid);extern struct commit_list *get_merge_bases (struct commit *rev1,struct commit *rev2);extern struct commit_list *get_merge_bases_many (struct commit *one,int n,struct commit **twos);
Signature · 1 line
2.17.0.582.gccdcbd54c44.dirty