Line | Count | Source |
1 | | #ifndef OBJECT_H |
2 | | #define OBJECT_H |
3 | | |
4 | | #include "hash.h" |
5 | | |
6 | | struct buffer_slab; |
7 | | struct repository; |
8 | | |
9 | | struct parsed_object_pool { |
10 | | struct repository *repo; |
11 | | struct object **obj_hash; |
12 | | int nr_objs, obj_hash_size; |
13 | | |
14 | | /* TODO: migrate alloc_states to mem-pool? */ |
15 | | struct alloc_state *blob_state; |
16 | | struct alloc_state *tree_state; |
17 | | struct alloc_state *commit_state; |
18 | | struct alloc_state *tag_state; |
19 | | struct alloc_state *object_state; |
20 | | |
21 | | /* parent substitutions from .git/info/grafts and .git/shallow */ |
22 | | struct commit_graft **grafts; |
23 | | int grafts_alloc, grafts_nr; |
24 | | |
25 | | int is_shallow; |
26 | | struct stat_validity *shallow_stat; |
27 | | char *alternate_shallow_file; |
28 | | |
29 | | int commit_graft_prepared; |
30 | | int substituted_parent; |
31 | | |
32 | | struct buffer_slab *buffer_slab; |
33 | | }; |
34 | | |
35 | | struct parsed_object_pool *parsed_object_pool_new(struct repository *repo); |
36 | | void parsed_object_pool_clear(struct parsed_object_pool *o); |
37 | | void parsed_object_pool_reset_commit_grafts(struct parsed_object_pool *o); |
38 | | |
39 | | struct object_list { |
40 | | struct object *item; |
41 | | struct object_list *next; |
42 | | }; |
43 | | |
44 | | struct object_array { |
45 | | unsigned int nr; |
46 | | unsigned int alloc; |
47 | | struct object_array_entry { |
48 | | struct object *item; |
49 | | /* |
50 | | * name or NULL. If non-NULL, the memory pointed to |
51 | | * is owned by this object *except* if it points at |
52 | | * object_array_slopbuf, which is a static copy of the |
53 | | * empty string. |
54 | | */ |
55 | | char *name; |
56 | | char *path; |
57 | | unsigned mode; |
58 | | } *objects; |
59 | | }; |
60 | | |
61 | 0 | #define OBJECT_ARRAY_INIT { 0 } |
62 | | |
63 | | void object_array_init(struct object_array *array); |
64 | | |
65 | | /* |
66 | | * object flag allocation: |
67 | | * revision.h: 0---------10 15 23--------28 |
68 | | * fetch-pack.c: 01 67 |
69 | | * negotiator/default.c: 2--5 |
70 | | * negotiator/skipping.c: 2--5 |
71 | | * walker.c: 0-2 |
72 | | * upload-pack.c: 4 11-----14 16-----19 |
73 | | * builtin/blame.c: 12-13 |
74 | | * bisect.c: 16 |
75 | | * bundle.c: 16 |
76 | | * http-push.c: 11-----14 |
77 | | * builtin/history.c: 11---13 |
78 | | * commit-graph.c: 15 |
79 | | * commit-reach.c: 16-------20 |
80 | | * builtin/last-modified.c: 1617 |
81 | | * object-name.c: 20 |
82 | | * list-objects-filter.c: 21 |
83 | | * bloom.c: 2122 |
84 | | * builtin/fsck.c: 0--3 |
85 | | * builtin/index-pack.c: 2021 |
86 | | * reflog.c: 10--12 |
87 | | * builtin/show-branch.c: 0-----------------------------------------------28 |
88 | | * builtin/unpack-objects.c: 2021 |
89 | | * pack-bitmap.h: 2122 |
90 | | */ |
91 | | #define FLAG_BITS 29 |
92 | | |
93 | | #define TYPE_BITS 3 |
94 | | |
95 | | /* |
96 | | * Values in this enum (except those outside the 3 bit range) are part |
97 | | * of pack file format. See gitformat-pack(5) for more information. |
98 | | */ |
99 | | enum object_type { |
100 | | OBJ_BAD = -1, |
101 | | OBJ_NONE = 0, |
102 | | OBJ_COMMIT = 1, |
103 | | OBJ_TREE = 2, |
104 | | OBJ_BLOB = 3, |
105 | | OBJ_TAG = 4, |
106 | | /* 5 for future expansion */ |
107 | | OBJ_OFS_DELTA = 6, |
108 | | OBJ_REF_DELTA = 7, |
109 | | OBJ_ANY, |
110 | | OBJ_MAX |
111 | | }; |
112 | | |
113 | | /* unknown mode (impossible combination S_IFIFO|S_IFCHR) */ |
114 | 0 | #define S_IFINVALID 0030000 |
115 | | |
116 | | /* |
117 | | * A "directory link" is a link to another git directory. |
118 | | * |
119 | | * The value 0160000 is not normally a valid mode, and |
120 | | * also just happens to be S_IFDIR + S_IFLNK |
121 | | */ |
122 | 0 | #define S_IFGITLINK 0160000 |
123 | 0 | #define S_ISGITLINK(m) (((m) & S_IFMT) == S_IFGITLINK) |
124 | | |
125 | 0 | #define S_ISSPARSEDIR(m) ((m) == S_IFDIR) |
126 | | |
127 | | static inline enum object_type object_type(unsigned int mode) |
128 | 0 | { |
129 | 0 | return S_ISDIR(mode) ? OBJ_TREE : |
130 | 0 | S_ISGITLINK(mode) ? OBJ_COMMIT : |
131 | 0 | OBJ_BLOB; |
132 | 0 | } Unexecuted instantiation: repository.c:object_type Unexecuted instantiation: run-command.c:object_type Unexecuted instantiation: setup.c:object_type Unexecuted instantiation: shallow.c:object_type Unexecuted instantiation: sparse-index.c:object_type Unexecuted instantiation: submodule-config.c:object_type Unexecuted instantiation: submodule.c:object_type Unexecuted instantiation: symlinks.c:object_type Unexecuted instantiation: tag.c:object_type Unexecuted instantiation: trace.c:object_type Unexecuted instantiation: tree-walk.c:object_type Unexecuted instantiation: tree.c:object_type Unexecuted instantiation: worktree.c:object_type Unexecuted instantiation: wt-status.c:object_type Unexecuted instantiation: alloc.c:object_type Unexecuted instantiation: blob.c:object_type Unexecuted instantiation: cache-tree.c:object_type Unexecuted instantiation: combine-diff.c:object_type Unexecuted instantiation: commit-reach.c:object_type Unexecuted instantiation: commit.c:object_type Unexecuted instantiation: config.c:object_type Unexecuted instantiation: convert.c:object_type Unexecuted instantiation: diff-lib.c:object_type Unexecuted instantiation: diff.c:object_type Unexecuted instantiation: diffcore-break.c:object_type Unexecuted instantiation: diffcore-rename.c:object_type Unexecuted instantiation: dir.c:object_type Unexecuted instantiation: environment.c:object_type Unexecuted instantiation: fsmonitor.c:object_type Unexecuted instantiation: gpg-interface.c:object_type Unexecuted instantiation: graph.c:object_type Unexecuted instantiation: hook.c:object_type Unexecuted instantiation: list-objects.c:object_type Unexecuted instantiation: log-tree.c:object_type Unexecuted instantiation: mailmap.c:object_type Unexecuted instantiation: merge-ort.c:object_type Unexecuted instantiation: name-hash.c:object_type Unexecuted instantiation: notes-cache.c:object_type Unexecuted instantiation: notes.c:object_type Unexecuted instantiation: object-file-convert.c:object_type Unexecuted instantiation: object-file.c:object_type Unexecuted instantiation: object-name.c:object_type Unexecuted instantiation: object.c:object_type Unexecuted instantiation: odb.c:object_type Unexecuted instantiation: source.c:object_type Unexecuted instantiation: source-files.c:object_type Unexecuted instantiation: source-inmemory.c:object_type Unexecuted instantiation: source-loose.c:object_type Unexecuted instantiation: source-packed.c:object_type Unexecuted instantiation: streaming.c:object_type Unexecuted instantiation: transaction.c:object_type Unexecuted instantiation: pack-bitmap.c:object_type Unexecuted instantiation: pack-check.c:object_type Unexecuted instantiation: pack-objects.c:object_type Unexecuted instantiation: pack-revindex.c:object_type Unexecuted instantiation: pack-write.c:object_type Unexecuted instantiation: packfile.c:object_type Unexecuted instantiation: packfile-list.c:object_type Unexecuted instantiation: parse-options-cb.c:object_type Unexecuted instantiation: path.c:object_type Unexecuted instantiation: pathspec.c:object_type Unexecuted instantiation: pretty.c:object_type Unexecuted instantiation: promisor-remote.c:object_type Unexecuted instantiation: pseudo-merge.c:object_type Unexecuted instantiation: range-diff.c:object_type Unexecuted instantiation: read-cache.c:object_type Unexecuted instantiation: reflog-walk.c:object_type Unexecuted instantiation: refs.c:object_type Unexecuted instantiation: debug.c:object_type Unexecuted instantiation: files-backend.c:object_type Unexecuted instantiation: reftable-backend.c:object_type Unexecuted instantiation: iterator.c:object_type Unexecuted instantiation: packed-backend.c:object_type Unexecuted instantiation: ref-cache.c:object_type Unexecuted instantiation: remote.c:object_type Unexecuted instantiation: repack.c:object_type Unexecuted instantiation: repack-geometry.c:object_type Unexecuted instantiation: replace-object.c:object_type Unexecuted instantiation: repo-settings.c:object_type Unexecuted instantiation: resolve-undo.c:object_type Unexecuted instantiation: revision.c:object_type Unexecuted instantiation: sequencer.c:object_type Unexecuted instantiation: tmp-objdir.c:object_type Unexecuted instantiation: trailer.c:object_type Unexecuted instantiation: transport.c:object_type Unexecuted instantiation: tree-diff.c:object_type Unexecuted instantiation: unpack-trees.c:object_type Unexecuted instantiation: xdiff-interface.c:object_type Unexecuted instantiation: apply.c:object_type Unexecuted instantiation: attr.c:object_type Unexecuted instantiation: bisect.c:object_type Unexecuted instantiation: bloom.c:object_type Unexecuted instantiation: branch.c:object_type Unexecuted instantiation: bundle-uri.c:object_type Unexecuted instantiation: bundle.c:object_type Unexecuted instantiation: commit-graph.c:object_type Unexecuted instantiation: connect.c:object_type Unexecuted instantiation: connected.c:object_type Unexecuted instantiation: decorate.c:object_type Unexecuted instantiation: diff-merges.c:object_type Unexecuted instantiation: entry.c:object_type Unexecuted instantiation: fetch-object-info.c:object_type Unexecuted instantiation: fetch-pack.c:object_type Unexecuted instantiation: fsck.c:object_type Unexecuted instantiation: grep.c:object_type Unexecuted instantiation: line-log.c:object_type Unexecuted instantiation: list-objects-filter-options.c:object_type Unexecuted instantiation: list-objects-filter.c:object_type Unexecuted instantiation: loose.c:object_type Unexecuted instantiation: match-trees.c:object_type Unexecuted instantiation: merge-ort-wrappers.c:object_type Unexecuted instantiation: merge.c:object_type Unexecuted instantiation: midx.c:object_type Unexecuted instantiation: notes-utils.c:object_type Unexecuted instantiation: pack-bitmap-write.c:object_type Unexecuted instantiation: pack-mtimes.c:object_type Unexecuted instantiation: parallel-checkout.c:object_type Unexecuted instantiation: patch-ids.c:object_type Unexecuted instantiation: preload-index.c:object_type Unexecuted instantiation: rebase-interactive.c:object_type Unexecuted instantiation: refspec.c:object_type Unexecuted instantiation: rerere.c:object_type Unexecuted instantiation: reset.c:object_type Unexecuted instantiation: send-pack.c:object_type Unexecuted instantiation: transport-helper.c:object_type Unexecuted instantiation: default.c:object_type Unexecuted instantiation: skipping.c:object_type Unexecuted instantiation: fuzz-pack-headers.c:object_type Unexecuted instantiation: fuzz-commit-graph.c:object_type Unexecuted instantiation: fuzz-pack-idx.c:object_type |
133 | | |
134 | 0 | #define ce_permissions(mode) (((mode) & 0100) ? 0755 : 0644) |
135 | | static inline unsigned int create_ce_mode(unsigned int mode) |
136 | 0 | { |
137 | 0 | if (S_ISLNK(mode)) |
138 | 0 | return S_IFLNK; |
139 | 0 | if (S_ISSPARSEDIR(mode)) |
140 | 0 | return S_IFDIR; |
141 | 0 | if (S_ISDIR(mode) || S_ISGITLINK(mode)) |
142 | 0 | return S_IFGITLINK; |
143 | 0 | return S_IFREG | ce_permissions(mode); |
144 | 0 | } Unexecuted instantiation: repository.c:create_ce_mode Unexecuted instantiation: run-command.c:create_ce_mode Unexecuted instantiation: setup.c:create_ce_mode Unexecuted instantiation: shallow.c:create_ce_mode Unexecuted instantiation: sparse-index.c:create_ce_mode Unexecuted instantiation: submodule-config.c:create_ce_mode Unexecuted instantiation: submodule.c:create_ce_mode Unexecuted instantiation: symlinks.c:create_ce_mode Unexecuted instantiation: tag.c:create_ce_mode Unexecuted instantiation: trace.c:create_ce_mode Unexecuted instantiation: tree-walk.c:create_ce_mode Unexecuted instantiation: tree.c:create_ce_mode Unexecuted instantiation: worktree.c:create_ce_mode Unexecuted instantiation: wt-status.c:create_ce_mode Unexecuted instantiation: alloc.c:create_ce_mode Unexecuted instantiation: blob.c:create_ce_mode Unexecuted instantiation: cache-tree.c:create_ce_mode Unexecuted instantiation: combine-diff.c:create_ce_mode Unexecuted instantiation: commit-reach.c:create_ce_mode Unexecuted instantiation: commit.c:create_ce_mode Unexecuted instantiation: config.c:create_ce_mode Unexecuted instantiation: convert.c:create_ce_mode Unexecuted instantiation: diff-lib.c:create_ce_mode Unexecuted instantiation: diff.c:create_ce_mode Unexecuted instantiation: diffcore-break.c:create_ce_mode Unexecuted instantiation: diffcore-rename.c:create_ce_mode Unexecuted instantiation: dir.c:create_ce_mode Unexecuted instantiation: environment.c:create_ce_mode Unexecuted instantiation: fsmonitor.c:create_ce_mode Unexecuted instantiation: gpg-interface.c:create_ce_mode Unexecuted instantiation: graph.c:create_ce_mode Unexecuted instantiation: hook.c:create_ce_mode Unexecuted instantiation: list-objects.c:create_ce_mode Unexecuted instantiation: log-tree.c:create_ce_mode Unexecuted instantiation: mailmap.c:create_ce_mode Unexecuted instantiation: merge-ort.c:create_ce_mode Unexecuted instantiation: name-hash.c:create_ce_mode Unexecuted instantiation: notes-cache.c:create_ce_mode Unexecuted instantiation: notes.c:create_ce_mode Unexecuted instantiation: object-file-convert.c:create_ce_mode Unexecuted instantiation: object-file.c:create_ce_mode Unexecuted instantiation: object-name.c:create_ce_mode Unexecuted instantiation: object.c:create_ce_mode Unexecuted instantiation: odb.c:create_ce_mode Unexecuted instantiation: source.c:create_ce_mode Unexecuted instantiation: source-files.c:create_ce_mode Unexecuted instantiation: source-inmemory.c:create_ce_mode Unexecuted instantiation: source-loose.c:create_ce_mode Unexecuted instantiation: source-packed.c:create_ce_mode Unexecuted instantiation: streaming.c:create_ce_mode Unexecuted instantiation: transaction.c:create_ce_mode Unexecuted instantiation: pack-bitmap.c:create_ce_mode Unexecuted instantiation: pack-check.c:create_ce_mode Unexecuted instantiation: pack-objects.c:create_ce_mode Unexecuted instantiation: pack-revindex.c:create_ce_mode Unexecuted instantiation: pack-write.c:create_ce_mode Unexecuted instantiation: packfile.c:create_ce_mode Unexecuted instantiation: packfile-list.c:create_ce_mode Unexecuted instantiation: parse-options-cb.c:create_ce_mode Unexecuted instantiation: path.c:create_ce_mode Unexecuted instantiation: pathspec.c:create_ce_mode Unexecuted instantiation: pretty.c:create_ce_mode Unexecuted instantiation: promisor-remote.c:create_ce_mode Unexecuted instantiation: pseudo-merge.c:create_ce_mode Unexecuted instantiation: range-diff.c:create_ce_mode Unexecuted instantiation: read-cache.c:create_ce_mode Unexecuted instantiation: reflog-walk.c:create_ce_mode Unexecuted instantiation: refs.c:create_ce_mode Unexecuted instantiation: debug.c:create_ce_mode Unexecuted instantiation: files-backend.c:create_ce_mode Unexecuted instantiation: reftable-backend.c:create_ce_mode Unexecuted instantiation: iterator.c:create_ce_mode Unexecuted instantiation: packed-backend.c:create_ce_mode Unexecuted instantiation: ref-cache.c:create_ce_mode Unexecuted instantiation: remote.c:create_ce_mode Unexecuted instantiation: repack.c:create_ce_mode Unexecuted instantiation: repack-geometry.c:create_ce_mode Unexecuted instantiation: replace-object.c:create_ce_mode Unexecuted instantiation: repo-settings.c:create_ce_mode Unexecuted instantiation: resolve-undo.c:create_ce_mode Unexecuted instantiation: revision.c:create_ce_mode Unexecuted instantiation: sequencer.c:create_ce_mode Unexecuted instantiation: tmp-objdir.c:create_ce_mode Unexecuted instantiation: trailer.c:create_ce_mode Unexecuted instantiation: transport.c:create_ce_mode Unexecuted instantiation: tree-diff.c:create_ce_mode Unexecuted instantiation: unpack-trees.c:create_ce_mode Unexecuted instantiation: xdiff-interface.c:create_ce_mode Unexecuted instantiation: apply.c:create_ce_mode Unexecuted instantiation: attr.c:create_ce_mode Unexecuted instantiation: bisect.c:create_ce_mode Unexecuted instantiation: bloom.c:create_ce_mode Unexecuted instantiation: branch.c:create_ce_mode Unexecuted instantiation: bundle-uri.c:create_ce_mode Unexecuted instantiation: bundle.c:create_ce_mode Unexecuted instantiation: commit-graph.c:create_ce_mode Unexecuted instantiation: connect.c:create_ce_mode Unexecuted instantiation: connected.c:create_ce_mode Unexecuted instantiation: decorate.c:create_ce_mode Unexecuted instantiation: diff-merges.c:create_ce_mode Unexecuted instantiation: entry.c:create_ce_mode Unexecuted instantiation: fetch-object-info.c:create_ce_mode Unexecuted instantiation: fetch-pack.c:create_ce_mode Unexecuted instantiation: fsck.c:create_ce_mode Unexecuted instantiation: grep.c:create_ce_mode Unexecuted instantiation: line-log.c:create_ce_mode Unexecuted instantiation: list-objects-filter-options.c:create_ce_mode Unexecuted instantiation: list-objects-filter.c:create_ce_mode Unexecuted instantiation: loose.c:create_ce_mode Unexecuted instantiation: match-trees.c:create_ce_mode Unexecuted instantiation: merge-ort-wrappers.c:create_ce_mode Unexecuted instantiation: merge.c:create_ce_mode Unexecuted instantiation: midx.c:create_ce_mode Unexecuted instantiation: notes-utils.c:create_ce_mode Unexecuted instantiation: pack-bitmap-write.c:create_ce_mode Unexecuted instantiation: pack-mtimes.c:create_ce_mode Unexecuted instantiation: parallel-checkout.c:create_ce_mode Unexecuted instantiation: patch-ids.c:create_ce_mode Unexecuted instantiation: preload-index.c:create_ce_mode Unexecuted instantiation: rebase-interactive.c:create_ce_mode Unexecuted instantiation: refspec.c:create_ce_mode Unexecuted instantiation: rerere.c:create_ce_mode Unexecuted instantiation: reset.c:create_ce_mode Unexecuted instantiation: send-pack.c:create_ce_mode Unexecuted instantiation: transport-helper.c:create_ce_mode Unexecuted instantiation: default.c:create_ce_mode Unexecuted instantiation: skipping.c:create_ce_mode Unexecuted instantiation: fuzz-pack-headers.c:create_ce_mode Unexecuted instantiation: fuzz-commit-graph.c:create_ce_mode Unexecuted instantiation: fuzz-pack-idx.c:create_ce_mode |
145 | | |
146 | | static inline unsigned int canon_mode(unsigned int mode) |
147 | 0 | { |
148 | 0 | if (S_ISREG(mode)) |
149 | 0 | return S_IFREG | ce_permissions(mode); |
150 | 0 | if (S_ISLNK(mode)) |
151 | 0 | return S_IFLNK; |
152 | 0 | if (S_ISDIR(mode)) |
153 | 0 | return S_IFDIR; |
154 | 0 | return S_IFGITLINK; |
155 | 0 | } Unexecuted instantiation: repository.c:canon_mode Unexecuted instantiation: run-command.c:canon_mode Unexecuted instantiation: setup.c:canon_mode Unexecuted instantiation: shallow.c:canon_mode Unexecuted instantiation: sparse-index.c:canon_mode Unexecuted instantiation: submodule-config.c:canon_mode Unexecuted instantiation: submodule.c:canon_mode Unexecuted instantiation: symlinks.c:canon_mode Unexecuted instantiation: tag.c:canon_mode Unexecuted instantiation: trace.c:canon_mode Unexecuted instantiation: tree-walk.c:canon_mode Unexecuted instantiation: tree.c:canon_mode Unexecuted instantiation: worktree.c:canon_mode Unexecuted instantiation: wt-status.c:canon_mode Unexecuted instantiation: alloc.c:canon_mode Unexecuted instantiation: blob.c:canon_mode Unexecuted instantiation: cache-tree.c:canon_mode Unexecuted instantiation: combine-diff.c:canon_mode Unexecuted instantiation: commit-reach.c:canon_mode Unexecuted instantiation: commit.c:canon_mode Unexecuted instantiation: config.c:canon_mode Unexecuted instantiation: convert.c:canon_mode Unexecuted instantiation: diff-lib.c:canon_mode Unexecuted instantiation: diff.c:canon_mode Unexecuted instantiation: diffcore-break.c:canon_mode Unexecuted instantiation: diffcore-rename.c:canon_mode Unexecuted instantiation: dir.c:canon_mode Unexecuted instantiation: environment.c:canon_mode Unexecuted instantiation: fsmonitor.c:canon_mode Unexecuted instantiation: gpg-interface.c:canon_mode Unexecuted instantiation: graph.c:canon_mode Unexecuted instantiation: hook.c:canon_mode Unexecuted instantiation: list-objects.c:canon_mode Unexecuted instantiation: log-tree.c:canon_mode Unexecuted instantiation: mailmap.c:canon_mode Unexecuted instantiation: merge-ort.c:canon_mode Unexecuted instantiation: name-hash.c:canon_mode Unexecuted instantiation: notes-cache.c:canon_mode Unexecuted instantiation: notes.c:canon_mode Unexecuted instantiation: object-file-convert.c:canon_mode Unexecuted instantiation: object-file.c:canon_mode Unexecuted instantiation: object-name.c:canon_mode Unexecuted instantiation: object.c:canon_mode Unexecuted instantiation: odb.c:canon_mode Unexecuted instantiation: source.c:canon_mode Unexecuted instantiation: source-files.c:canon_mode Unexecuted instantiation: source-inmemory.c:canon_mode Unexecuted instantiation: source-loose.c:canon_mode Unexecuted instantiation: source-packed.c:canon_mode Unexecuted instantiation: streaming.c:canon_mode Unexecuted instantiation: transaction.c:canon_mode Unexecuted instantiation: pack-bitmap.c:canon_mode Unexecuted instantiation: pack-check.c:canon_mode Unexecuted instantiation: pack-objects.c:canon_mode Unexecuted instantiation: pack-revindex.c:canon_mode Unexecuted instantiation: pack-write.c:canon_mode Unexecuted instantiation: packfile.c:canon_mode Unexecuted instantiation: packfile-list.c:canon_mode Unexecuted instantiation: parse-options-cb.c:canon_mode Unexecuted instantiation: path.c:canon_mode Unexecuted instantiation: pathspec.c:canon_mode Unexecuted instantiation: pretty.c:canon_mode Unexecuted instantiation: promisor-remote.c:canon_mode Unexecuted instantiation: pseudo-merge.c:canon_mode Unexecuted instantiation: range-diff.c:canon_mode Unexecuted instantiation: read-cache.c:canon_mode Unexecuted instantiation: reflog-walk.c:canon_mode Unexecuted instantiation: refs.c:canon_mode Unexecuted instantiation: debug.c:canon_mode Unexecuted instantiation: files-backend.c:canon_mode Unexecuted instantiation: reftable-backend.c:canon_mode Unexecuted instantiation: iterator.c:canon_mode Unexecuted instantiation: packed-backend.c:canon_mode Unexecuted instantiation: ref-cache.c:canon_mode Unexecuted instantiation: remote.c:canon_mode Unexecuted instantiation: repack.c:canon_mode Unexecuted instantiation: repack-geometry.c:canon_mode Unexecuted instantiation: replace-object.c:canon_mode Unexecuted instantiation: repo-settings.c:canon_mode Unexecuted instantiation: resolve-undo.c:canon_mode Unexecuted instantiation: revision.c:canon_mode Unexecuted instantiation: sequencer.c:canon_mode Unexecuted instantiation: tmp-objdir.c:canon_mode Unexecuted instantiation: trailer.c:canon_mode Unexecuted instantiation: transport.c:canon_mode Unexecuted instantiation: tree-diff.c:canon_mode Unexecuted instantiation: unpack-trees.c:canon_mode Unexecuted instantiation: xdiff-interface.c:canon_mode Unexecuted instantiation: apply.c:canon_mode Unexecuted instantiation: attr.c:canon_mode Unexecuted instantiation: bisect.c:canon_mode Unexecuted instantiation: bloom.c:canon_mode Unexecuted instantiation: branch.c:canon_mode Unexecuted instantiation: bundle-uri.c:canon_mode Unexecuted instantiation: bundle.c:canon_mode Unexecuted instantiation: commit-graph.c:canon_mode Unexecuted instantiation: connect.c:canon_mode Unexecuted instantiation: connected.c:canon_mode Unexecuted instantiation: decorate.c:canon_mode Unexecuted instantiation: diff-merges.c:canon_mode Unexecuted instantiation: entry.c:canon_mode Unexecuted instantiation: fetch-object-info.c:canon_mode Unexecuted instantiation: fetch-pack.c:canon_mode Unexecuted instantiation: fsck.c:canon_mode Unexecuted instantiation: grep.c:canon_mode Unexecuted instantiation: line-log.c:canon_mode Unexecuted instantiation: list-objects-filter-options.c:canon_mode Unexecuted instantiation: list-objects-filter.c:canon_mode Unexecuted instantiation: loose.c:canon_mode Unexecuted instantiation: match-trees.c:canon_mode Unexecuted instantiation: merge-ort-wrappers.c:canon_mode Unexecuted instantiation: merge.c:canon_mode Unexecuted instantiation: midx.c:canon_mode Unexecuted instantiation: notes-utils.c:canon_mode Unexecuted instantiation: pack-bitmap-write.c:canon_mode Unexecuted instantiation: pack-mtimes.c:canon_mode Unexecuted instantiation: parallel-checkout.c:canon_mode Unexecuted instantiation: patch-ids.c:canon_mode Unexecuted instantiation: preload-index.c:canon_mode Unexecuted instantiation: rebase-interactive.c:canon_mode Unexecuted instantiation: refspec.c:canon_mode Unexecuted instantiation: rerere.c:canon_mode Unexecuted instantiation: reset.c:canon_mode Unexecuted instantiation: send-pack.c:canon_mode Unexecuted instantiation: transport-helper.c:canon_mode Unexecuted instantiation: default.c:canon_mode Unexecuted instantiation: skipping.c:canon_mode Unexecuted instantiation: fuzz-pack-headers.c:canon_mode Unexecuted instantiation: fuzz-commit-graph.c:canon_mode Unexecuted instantiation: fuzz-pack-idx.c:canon_mode |
156 | | |
157 | | /* |
158 | | * The object type is stored in 3 bits. |
159 | | */ |
160 | | struct object { |
161 | | unsigned parsed : 1; |
162 | | unsigned type : TYPE_BITS; |
163 | | unsigned flags : FLAG_BITS; |
164 | | struct object_id oid; |
165 | | }; |
166 | | |
167 | | const char *type_name(unsigned int type); |
168 | | int type_from_string_gently(const char *str, ssize_t, int gentle); |
169 | | #define type_from_string(str) type_from_string_gently(str, -1, 0) |
170 | | |
171 | | /* |
172 | | * Return the current number of buckets in the object hashmap. |
173 | | */ |
174 | | unsigned int get_max_object_index(const struct repository *repo); |
175 | | |
176 | | /* |
177 | | * Return the object from the specified bucket in the object hashmap. |
178 | | */ |
179 | | struct object *get_indexed_object(const struct repository *repo, |
180 | | unsigned int); |
181 | | |
182 | | /* |
183 | | * This can be used to see if we have heard of the object before, but |
184 | | * it can return "yes we have, and here is a half-initialised object" |
185 | | * for an object that we haven't loaded/parsed yet. |
186 | | * |
187 | | * When parsing a commit to create an in-core commit object, its |
188 | | * parents list holds commit objects that represent its parents, but |
189 | | * they are expected to be lazily initialized and do not know what |
190 | | * their trees or parents are yet. When this function returns such a |
191 | | * half-initialised objects, the caller is expected to initialize them |
192 | | * by calling parse_object() on them. |
193 | | */ |
194 | | struct object *lookup_object(struct repository *r, const struct object_id *oid); |
195 | | |
196 | | void *create_object(struct repository *r, const struct object_id *oid, void *obj); |
197 | | |
198 | | void *object_as_type(struct object *obj, enum object_type type, int quiet); |
199 | | |
200 | | |
201 | | static inline const char *parse_mode(const char *str, uint16_t *modep) |
202 | 0 | { |
203 | 0 | unsigned char c; |
204 | 0 | unsigned int mode = 0; |
205 | |
|
206 | 0 | if (*str == ' ') |
207 | 0 | return NULL; |
208 | | |
209 | 0 | while ((c = *str++) != ' ') { |
210 | 0 | if (c < '0' || c > '7') |
211 | 0 | return NULL; |
212 | 0 | mode = (mode << 3) + (c - '0'); |
213 | 0 | } |
214 | 0 | *modep = mode; |
215 | 0 | return str; |
216 | 0 | } Unexecuted instantiation: repository.c:parse_mode Unexecuted instantiation: run-command.c:parse_mode Unexecuted instantiation: setup.c:parse_mode Unexecuted instantiation: shallow.c:parse_mode Unexecuted instantiation: sparse-index.c:parse_mode Unexecuted instantiation: submodule-config.c:parse_mode Unexecuted instantiation: submodule.c:parse_mode Unexecuted instantiation: symlinks.c:parse_mode Unexecuted instantiation: tag.c:parse_mode Unexecuted instantiation: trace.c:parse_mode Unexecuted instantiation: tree-walk.c:parse_mode Unexecuted instantiation: tree.c:parse_mode Unexecuted instantiation: worktree.c:parse_mode Unexecuted instantiation: wt-status.c:parse_mode Unexecuted instantiation: alloc.c:parse_mode Unexecuted instantiation: blob.c:parse_mode Unexecuted instantiation: cache-tree.c:parse_mode Unexecuted instantiation: combine-diff.c:parse_mode Unexecuted instantiation: commit-reach.c:parse_mode Unexecuted instantiation: commit.c:parse_mode Unexecuted instantiation: config.c:parse_mode Unexecuted instantiation: convert.c:parse_mode Unexecuted instantiation: diff-lib.c:parse_mode Unexecuted instantiation: diff.c:parse_mode Unexecuted instantiation: diffcore-break.c:parse_mode Unexecuted instantiation: diffcore-rename.c:parse_mode Unexecuted instantiation: dir.c:parse_mode Unexecuted instantiation: environment.c:parse_mode Unexecuted instantiation: fsmonitor.c:parse_mode Unexecuted instantiation: gpg-interface.c:parse_mode Unexecuted instantiation: graph.c:parse_mode Unexecuted instantiation: hook.c:parse_mode Unexecuted instantiation: list-objects.c:parse_mode Unexecuted instantiation: log-tree.c:parse_mode Unexecuted instantiation: mailmap.c:parse_mode Unexecuted instantiation: merge-ort.c:parse_mode Unexecuted instantiation: name-hash.c:parse_mode Unexecuted instantiation: notes-cache.c:parse_mode Unexecuted instantiation: notes.c:parse_mode Unexecuted instantiation: object-file-convert.c:parse_mode Unexecuted instantiation: object-file.c:parse_mode Unexecuted instantiation: object-name.c:parse_mode Unexecuted instantiation: object.c:parse_mode Unexecuted instantiation: odb.c:parse_mode Unexecuted instantiation: source.c:parse_mode Unexecuted instantiation: source-files.c:parse_mode Unexecuted instantiation: source-inmemory.c:parse_mode Unexecuted instantiation: source-loose.c:parse_mode Unexecuted instantiation: source-packed.c:parse_mode Unexecuted instantiation: streaming.c:parse_mode Unexecuted instantiation: transaction.c:parse_mode Unexecuted instantiation: pack-bitmap.c:parse_mode Unexecuted instantiation: pack-check.c:parse_mode Unexecuted instantiation: pack-objects.c:parse_mode Unexecuted instantiation: pack-revindex.c:parse_mode Unexecuted instantiation: pack-write.c:parse_mode Unexecuted instantiation: packfile.c:parse_mode Unexecuted instantiation: packfile-list.c:parse_mode Unexecuted instantiation: parse-options-cb.c:parse_mode Unexecuted instantiation: path.c:parse_mode Unexecuted instantiation: pathspec.c:parse_mode Unexecuted instantiation: pretty.c:parse_mode Unexecuted instantiation: promisor-remote.c:parse_mode Unexecuted instantiation: pseudo-merge.c:parse_mode Unexecuted instantiation: range-diff.c:parse_mode Unexecuted instantiation: read-cache.c:parse_mode Unexecuted instantiation: reflog-walk.c:parse_mode Unexecuted instantiation: refs.c:parse_mode Unexecuted instantiation: debug.c:parse_mode Unexecuted instantiation: files-backend.c:parse_mode Unexecuted instantiation: reftable-backend.c:parse_mode Unexecuted instantiation: iterator.c:parse_mode Unexecuted instantiation: packed-backend.c:parse_mode Unexecuted instantiation: ref-cache.c:parse_mode Unexecuted instantiation: remote.c:parse_mode Unexecuted instantiation: repack.c:parse_mode Unexecuted instantiation: repack-geometry.c:parse_mode Unexecuted instantiation: replace-object.c:parse_mode Unexecuted instantiation: repo-settings.c:parse_mode Unexecuted instantiation: resolve-undo.c:parse_mode Unexecuted instantiation: revision.c:parse_mode Unexecuted instantiation: sequencer.c:parse_mode Unexecuted instantiation: tmp-objdir.c:parse_mode Unexecuted instantiation: trailer.c:parse_mode Unexecuted instantiation: transport.c:parse_mode Unexecuted instantiation: tree-diff.c:parse_mode Unexecuted instantiation: unpack-trees.c:parse_mode Unexecuted instantiation: xdiff-interface.c:parse_mode Unexecuted instantiation: apply.c:parse_mode Unexecuted instantiation: attr.c:parse_mode Unexecuted instantiation: bisect.c:parse_mode Unexecuted instantiation: bloom.c:parse_mode Unexecuted instantiation: branch.c:parse_mode Unexecuted instantiation: bundle-uri.c:parse_mode Unexecuted instantiation: bundle.c:parse_mode Unexecuted instantiation: commit-graph.c:parse_mode Unexecuted instantiation: connect.c:parse_mode Unexecuted instantiation: connected.c:parse_mode Unexecuted instantiation: decorate.c:parse_mode Unexecuted instantiation: diff-merges.c:parse_mode Unexecuted instantiation: entry.c:parse_mode Unexecuted instantiation: fetch-object-info.c:parse_mode Unexecuted instantiation: fetch-pack.c:parse_mode Unexecuted instantiation: fsck.c:parse_mode Unexecuted instantiation: grep.c:parse_mode Unexecuted instantiation: line-log.c:parse_mode Unexecuted instantiation: list-objects-filter-options.c:parse_mode Unexecuted instantiation: list-objects-filter.c:parse_mode Unexecuted instantiation: loose.c:parse_mode Unexecuted instantiation: match-trees.c:parse_mode Unexecuted instantiation: merge-ort-wrappers.c:parse_mode Unexecuted instantiation: merge.c:parse_mode Unexecuted instantiation: midx.c:parse_mode Unexecuted instantiation: notes-utils.c:parse_mode Unexecuted instantiation: pack-bitmap-write.c:parse_mode Unexecuted instantiation: pack-mtimes.c:parse_mode Unexecuted instantiation: parallel-checkout.c:parse_mode Unexecuted instantiation: patch-ids.c:parse_mode Unexecuted instantiation: preload-index.c:parse_mode Unexecuted instantiation: rebase-interactive.c:parse_mode Unexecuted instantiation: refspec.c:parse_mode Unexecuted instantiation: rerere.c:parse_mode Unexecuted instantiation: reset.c:parse_mode Unexecuted instantiation: send-pack.c:parse_mode Unexecuted instantiation: transport-helper.c:parse_mode Unexecuted instantiation: default.c:parse_mode Unexecuted instantiation: skipping.c:parse_mode Unexecuted instantiation: fuzz-pack-headers.c:parse_mode Unexecuted instantiation: fuzz-commit-graph.c:parse_mode Unexecuted instantiation: fuzz-pack-idx.c:parse_mode |
217 | | |
218 | | /* |
219 | | * Returns the object, having parsed it to find out what it is. |
220 | | * |
221 | | * Returns NULL if the object is missing or corrupt. |
222 | | */ |
223 | | enum parse_object_flags { |
224 | | PARSE_OBJECT_SKIP_HASH_CHECK = 1 << 0, |
225 | | PARSE_OBJECT_DISCARD_TREE = 1 << 1, |
226 | | }; |
227 | | struct object *parse_object(struct repository *r, const struct object_id *oid); |
228 | | struct object *parse_object_with_flags(struct repository *r, |
229 | | const struct object_id *oid, |
230 | | enum parse_object_flags flags); |
231 | | |
232 | | /* |
233 | | * Like parse_object, but will die() instead of returning NULL. If the |
234 | | * "name" parameter is not NULL, it is included in the error message |
235 | | * (otherwise, the hex object ID is given). |
236 | | */ |
237 | | struct object *parse_object_or_die(struct repository *repo, const struct object_id *oid, |
238 | | const char *name); |
239 | | |
240 | | /* Given the result of read_sha1_file(), returns the object after |
241 | | * parsing it. eaten_p indicates if the object has a borrowed copy |
242 | | * of buffer and the caller should not free() it. |
243 | | */ |
244 | | struct object *parse_object_buffer(struct repository *r, const struct object_id *oid, enum object_type type, unsigned long size, void *buffer, int *eaten_p); |
245 | | |
246 | | /* |
247 | | * Allocate and return an object struct, even if you do not know the type of |
248 | | * the object. The returned object may have its "type" field set to a real type |
249 | | * (if somebody previously called lookup_blob(), etc), or it may be set to |
250 | | * OBJ_NONE. In the latter case, subsequent calls to lookup_blob(), etc, will |
251 | | * set the type field as appropriate. |
252 | | * |
253 | | * Use this when you do not know the expected type of an object and want to |
254 | | * avoid parsing it for efficiency reasons. Try to avoid it otherwise; it |
255 | | * may allocate excess memory, since the returned object must be as large as |
256 | | * the maximum struct of any type. |
257 | | */ |
258 | | struct object *lookup_unknown_object(struct repository *r, const struct object_id *oid); |
259 | | |
260 | | /* |
261 | | * Dispatch to the appropriate lookup_blob(), lookup_commit(), etc, based on |
262 | | * "type". |
263 | | */ |
264 | | struct object *lookup_object_by_type(struct repository *r, const struct object_id *oid, |
265 | | enum object_type type); |
266 | | |
267 | | enum peel_status { |
268 | | /* object was peeled successfully: */ |
269 | | PEEL_PEELED = 0, |
270 | | |
271 | | /* |
272 | | * object cannot be peeled because the named object (or an |
273 | | * object referred to by a tag in the peel chain), does not |
274 | | * exist. |
275 | | */ |
276 | | PEEL_INVALID = -1, |
277 | | |
278 | | /* object cannot be peeled because it is not a tag: */ |
279 | | PEEL_NON_TAG = -2, |
280 | | |
281 | | /* ref_entry contains no peeled value because it is a symref: */ |
282 | | PEEL_IS_SYMREF = -3, |
283 | | |
284 | | /* |
285 | | * ref_entry cannot be peeled because it is broken (i.e., the |
286 | | * symbolic reference cannot even be resolved to an object |
287 | | * name): |
288 | | */ |
289 | | PEEL_BROKEN = -4 |
290 | | }; |
291 | | |
292 | | enum peel_object_flags { |
293 | | /* |
294 | | * Always verify the object type of the tagged object, even in the case |
295 | | * where the looked-up object already has an object type. This can be |
296 | | * useful when the tagged object type may be invalid. One such case is |
297 | | * when looking up objects via tags, where we blindly trust the object |
298 | | * type declared by the tag. |
299 | | */ |
300 | | PEEL_OBJECT_VERIFY_TAGGED_OBJECT_TYPE = (1 << 0), |
301 | | }; |
302 | | |
303 | | /* |
304 | | * Peel the named object; i.e., if the object is a tag, resolve the |
305 | | * tag recursively until a non-tag is found. If successful, store the |
306 | | * result to oid and return PEEL_PEELED. If the object is not a tag |
307 | | * or is not valid, return PEEL_NON_TAG or PEEL_INVALID, respectively, |
308 | | * and leave oid unchanged. |
309 | | */ |
310 | | enum peel_status peel_object(struct repository *r, |
311 | | const struct object_id *name, |
312 | | struct object_id *oid, |
313 | | unsigned flags); |
314 | | enum peel_status peel_object_ext(struct repository *r, |
315 | | const struct object_id *name, |
316 | | struct object_id *oid, |
317 | | unsigned flags, |
318 | | enum object_type *typep); |
319 | | |
320 | | struct object_list *object_list_insert(struct object *item, |
321 | | struct object_list **list_p); |
322 | | |
323 | | int object_list_contains(struct object_list *list, struct object *obj); |
324 | | |
325 | | void object_list_free(struct object_list **list); |
326 | | |
327 | | /* Object array handling .. */ |
328 | | void add_object_array(struct object *obj, const char *name, struct object_array *array); |
329 | | void add_object_array_with_path(struct object *obj, const char *name, struct object_array *array, unsigned mode, const char *path); |
330 | | |
331 | | /* |
332 | | * Returns NULL if the array is empty. Otherwise, returns the last object |
333 | | * after removing its entry from the array. Other resources associated |
334 | | * with that object are left in an unspecified state and should not be |
335 | | * examined. |
336 | | */ |
337 | | struct object *object_array_pop(struct object_array *array); |
338 | | |
339 | | typedef int (*object_array_each_func_t)(struct object_array_entry *, void *); |
340 | | |
341 | | /* |
342 | | * Apply want to each entry in array, retaining only the entries for |
343 | | * which the function returns true. Preserve the order of the entries |
344 | | * that are retained. |
345 | | */ |
346 | | void object_array_filter(struct object_array *array, |
347 | | object_array_each_func_t want, void *cb_data); |
348 | | |
349 | | /* |
350 | | * Remove any objects from the array, freeing all used memory; afterwards |
351 | | * the array is ready to store more objects with add_object_array(). |
352 | | */ |
353 | | void object_array_clear(struct object_array *array); |
354 | | |
355 | | void clear_object_flags(struct repository *repo, unsigned flags); |
356 | | |
357 | | /* |
358 | | * Clear the specified object flags from all in-core commit objects from |
359 | | * the specified repository. |
360 | | */ |
361 | | void repo_clear_commit_marks(struct repository *r, unsigned int flags); |
362 | | |
363 | | #endif /* OBJECT_H */ |