Coverage Report

Created: 2026-10-17 07:15

next uncovered line (L), next uncovered region (R), next uncovered branch (B)
/src/git/object.h
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 */