Line | Count | Source (jump to first uncovered line) |
1 | | #ifndef REFS_H |
2 | | #define REFS_H |
3 | | |
4 | | #include "commit.h" |
5 | | #include "repository.h" |
6 | | |
7 | | struct fsck_options; |
8 | | struct object_id; |
9 | | struct ref_store; |
10 | | struct strbuf; |
11 | | struct string_list; |
12 | | struct string_list_item; |
13 | | struct worktree; |
14 | | |
15 | | enum ref_storage_format ref_storage_format_by_name(const char *name); |
16 | | const char *ref_storage_format_to_name(enum ref_storage_format ref_storage_format); |
17 | | |
18 | | /* |
19 | | * Resolve a reference, recursively following symbolic refererences. |
20 | | * |
21 | | * Return the name of the non-symbolic reference that ultimately pointed |
22 | | * at the resolved object name. The return value, if not NULL, is a |
23 | | * pointer into either a static buffer or the input ref. |
24 | | * |
25 | | * If oid is non-NULL, store the referred-to object's name in it. |
26 | | * |
27 | | * If the reference cannot be resolved to an object, the behavior |
28 | | * depends on the RESOLVE_REF_READING flag: |
29 | | * |
30 | | * - If RESOLVE_REF_READING is set, return NULL. |
31 | | * |
32 | | * - If RESOLVE_REF_READING is not set, clear oid and return the name of |
33 | | * the last reference name in the chain, which will either be a non-symbolic |
34 | | * reference or an undefined reference. If this is a prelude to |
35 | | * "writing" to the ref, the return value is the name of the ref |
36 | | * that will actually be created or changed. |
37 | | * |
38 | | * If the RESOLVE_REF_NO_RECURSE flag is passed, only resolves one |
39 | | * level of symbolic reference. The value stored in oid for a symbolic |
40 | | * reference will always be null_oid in this case, and the return |
41 | | * value is the reference that the symref refers to directly. |
42 | | * |
43 | | * If flags is non-NULL, set the value that it points to the |
44 | | * combination of REF_ISPACKED (if the reference was found among the |
45 | | * packed references), REF_ISSYMREF (if the initial reference was a |
46 | | * symbolic reference), REF_BAD_NAME (if the reference name is ill |
47 | | * formed --- see RESOLVE_REF_ALLOW_BAD_NAME below), and REF_ISBROKEN |
48 | | * (if the ref is malformed or has a bad name). See refs.h for more detail |
49 | | * on each flag. |
50 | | * |
51 | | * If ref is not a properly-formatted, normalized reference, return |
52 | | * NULL. If more than MAXDEPTH recursive symbolic lookups are needed, |
53 | | * give up and return NULL. |
54 | | * |
55 | | * RESOLVE_REF_ALLOW_BAD_NAME allows resolving refs even when their |
56 | | * name is invalid according to git-check-ref-format(1). If the name |
57 | | * is bad then the value stored in oid will be null_oid and the two |
58 | | * flags REF_ISBROKEN and REF_BAD_NAME will be set. |
59 | | * |
60 | | * Even with RESOLVE_REF_ALLOW_BAD_NAME, names that escape the refs/ |
61 | | * directory and do not consist of all caps and underscores cannot be |
62 | | * resolved. The function returns NULL for such ref names. |
63 | | * Caps and underscores refers to the pseudorefs, such as HEAD, |
64 | | * FETCH_HEAD and friends, that all live outside of the refs/ directory. |
65 | | */ |
66 | 0 | #define RESOLVE_REF_READING 0x01 |
67 | 0 | #define RESOLVE_REF_NO_RECURSE 0x02 |
68 | 0 | #define RESOLVE_REF_ALLOW_BAD_NAME 0x04 |
69 | | |
70 | | const char *refs_resolve_ref_unsafe(struct ref_store *refs, |
71 | | const char *refname, |
72 | | int resolve_flags, |
73 | | struct object_id *oid, |
74 | | int *flags); |
75 | | |
76 | | char *refs_resolve_refdup(struct ref_store *refs, |
77 | | const char *refname, int resolve_flags, |
78 | | struct object_id *oid, int *flags); |
79 | | |
80 | | int refs_read_ref_full(struct ref_store *refs, const char *refname, |
81 | | int resolve_flags, struct object_id *oid, int *flags); |
82 | | |
83 | | int refs_read_ref(struct ref_store *refs, const char *refname, struct object_id *oid); |
84 | | |
85 | | int refs_read_symbolic_ref(struct ref_store *ref_store, const char *refname, |
86 | | struct strbuf *referent); |
87 | | |
88 | | /* |
89 | | * Return 0 if a reference named refname could be created without |
90 | | * conflicting with the name of an existing reference. Otherwise, |
91 | | * return a negative value and write an explanation to err. If extras |
92 | | * is non-NULL, it is a list of additional refnames with which refname |
93 | | * is not allowed to conflict. If skip is non-NULL, ignore potential |
94 | | * conflicts with refs in skip (e.g., because they are scheduled for |
95 | | * deletion in the same operation). Behavior is undefined if the same |
96 | | * name is listed in both extras and skip. |
97 | | * |
98 | | * Two reference names conflict if one of them exactly matches the |
99 | | * leading components of the other; e.g., "foo/bar" conflicts with |
100 | | * both "foo" and with "foo/bar/baz" but not with "foo/bar" or |
101 | | * "foo/barbados". |
102 | | * |
103 | | * extras and skip must be sorted. |
104 | | */ |
105 | | |
106 | | int refs_verify_refname_available(struct ref_store *refs, |
107 | | const char *refname, |
108 | | const struct string_list *extras, |
109 | | const struct string_list *skip, |
110 | | struct strbuf *err); |
111 | | |
112 | | int refs_ref_exists(struct ref_store *refs, const char *refname); |
113 | | |
114 | | int should_autocreate_reflog(const char *refname); |
115 | | |
116 | | int is_branch(const char *refname); |
117 | | |
118 | 0 | #define REF_STORE_CREATE_ON_DISK_IS_WORKTREE (1 << 0) |
119 | | |
120 | | int ref_store_create_on_disk(struct ref_store *refs, int flags, struct strbuf *err); |
121 | | |
122 | | /* |
123 | | * Release all memory and resources associated with the ref store. |
124 | | */ |
125 | | void ref_store_release(struct ref_store *ref_store); |
126 | | |
127 | | /* |
128 | | * Remove the ref store from disk. This deletes all associated data. |
129 | | */ |
130 | | int ref_store_remove_on_disk(struct ref_store *refs, struct strbuf *err); |
131 | | |
132 | | /* |
133 | | * Return the peeled value of the oid currently being iterated via |
134 | | * for_each_ref(), etc. This is equivalent to calling: |
135 | | * |
136 | | * peel_object(r, oid, &peeled); |
137 | | * |
138 | | * with the "oid" value given to the each_ref_fn callback, except |
139 | | * that some ref storage may be able to answer the query without |
140 | | * actually loading the object in memory. |
141 | | */ |
142 | | int peel_iterated_oid(struct repository *r, |
143 | | const struct object_id *base, struct object_id *peeled); |
144 | | |
145 | | /** |
146 | | * Resolve refname in the nested "gitlink" repository in the specified |
147 | | * submodule (which must be non-NULL). If the resolution is |
148 | | * successful, return 0 and set oid to the name of the object; |
149 | | * otherwise, return a non-zero value. |
150 | | */ |
151 | | int repo_resolve_gitlink_ref(struct repository *r, |
152 | | const char *submodule, const char *refname, |
153 | | struct object_id *oid); |
154 | | |
155 | | /* |
156 | | * Return true iff abbrev_name is a possible abbreviation for |
157 | | * full_name according to the rules defined by ref_rev_parse_rules in |
158 | | * refs.c. |
159 | | */ |
160 | | int refname_match(const char *abbrev_name, const char *full_name); |
161 | | |
162 | | /* |
163 | | * Given a 'prefix' expand it by the rules in 'ref_rev_parse_rules' and add |
164 | | * the results to 'prefixes' |
165 | | */ |
166 | | struct strvec; |
167 | | void expand_ref_prefix(struct strvec *prefixes, const char *prefix); |
168 | | |
169 | | int expand_ref(struct repository *r, const char *str, int len, struct object_id *oid, char **ref); |
170 | | int repo_dwim_ref(struct repository *r, const char *str, int len, |
171 | | struct object_id *oid, char **ref, int nonfatal_dangling_mark); |
172 | | int repo_dwim_log(struct repository *r, const char *str, int len, struct object_id *oid, char **ref); |
173 | | |
174 | | /* |
175 | | * Retrieves the default branch name for newly-initialized repositories. |
176 | | * |
177 | | * The return value is an allocated string. |
178 | | */ |
179 | | char *repo_default_branch_name(struct repository *r, int quiet); |
180 | | |
181 | | /* |
182 | | * A ref_transaction represents a collection of reference updates that |
183 | | * should succeed or fail together. |
184 | | * |
185 | | * Calling sequence |
186 | | * ---------------- |
187 | | * |
188 | | * - Allocate and initialize a `struct ref_transaction` by calling |
189 | | * `ref_transaction_begin()`. |
190 | | * |
191 | | * - Specify the intended ref updates by calling one or more of the |
192 | | * following functions: |
193 | | * - `ref_transaction_update()` |
194 | | * - `ref_transaction_create()` |
195 | | * - `ref_transaction_delete()` |
196 | | * - `ref_transaction_verify()` |
197 | | * |
198 | | * - Then either: |
199 | | * |
200 | | * - Optionally call `ref_transaction_prepare()` to prepare the |
201 | | * transaction. This locks all references, checks preconditions, |
202 | | * etc. but doesn't finalize anything. If this step fails, the |
203 | | * transaction has been closed and can only be freed. If this step |
204 | | * succeeds, then `ref_transaction_commit()` is almost certain to |
205 | | * succeed. However, you can still call `ref_transaction_abort()` |
206 | | * if you decide not to commit the transaction after all. |
207 | | * |
208 | | * - Call `ref_transaction_commit()` to execute the transaction, |
209 | | * make the changes permanent, and release all locks. If you |
210 | | * haven't already called `ref_transaction_prepare()`, then |
211 | | * `ref_transaction_commit()` calls it for you. |
212 | | * |
213 | | * Or |
214 | | * |
215 | | * - Call `initial_ref_transaction_commit()` if the ref database is |
216 | | * known to be empty and have no other writers (e.g. during |
217 | | * clone). This is likely to be much faster than |
218 | | * `ref_transaction_commit()`. `ref_transaction_prepare()` should |
219 | | * *not* be called before `initial_ref_transaction_commit()`. |
220 | | * |
221 | | * - Then finally, call `ref_transaction_free()` to free the |
222 | | * `ref_transaction` data structure. |
223 | | * |
224 | | * At any time before calling `ref_transaction_commit()`, you can call |
225 | | * `ref_transaction_abort()` to abort the transaction, rollback any |
226 | | * locks, and free any associated resources (including the |
227 | | * `ref_transaction` data structure). |
228 | | * |
229 | | * Putting it all together, a complete reference update looks like |
230 | | * |
231 | | * struct ref_transaction *transaction; |
232 | | * struct strbuf err = STRBUF_INIT; |
233 | | * int ret = 0; |
234 | | * |
235 | | * transaction = ref_store_transaction_begin(refs, &err); |
236 | | * if (!transaction || |
237 | | * ref_transaction_update(...) || |
238 | | * ref_transaction_create(...) || |
239 | | * ...etc... || |
240 | | * ref_transaction_commit(transaction, &err)) { |
241 | | * error("%s", err.buf); |
242 | | * ret = -1; |
243 | | * } |
244 | | * ref_transaction_free(transaction); |
245 | | * strbuf_release(&err); |
246 | | * return ret; |
247 | | * |
248 | | * Error handling |
249 | | * -------------- |
250 | | * |
251 | | * On error, transaction functions append a message about what |
252 | | * went wrong to the 'err' argument. The message mentions what |
253 | | * ref was being updated (if any) when the error occurred so it |
254 | | * can be passed to 'die' or 'error' as-is. |
255 | | * |
256 | | * The message is appended to err without first clearing err. |
257 | | * err will not be '\n' terminated. |
258 | | * |
259 | | * Caveats |
260 | | * ------- |
261 | | * |
262 | | * Note that no locks are taken, and no refs are read, until |
263 | | * `ref_transaction_prepare()` or `ref_transaction_commit()` is |
264 | | * called. So, for example, `ref_transaction_verify()` won't report a |
265 | | * verification failure until the commit is attempted. |
266 | | */ |
267 | | struct ref_transaction; |
268 | | |
269 | | /* |
270 | | * Bit values set in the flags argument passed to each_ref_fn() and |
271 | | * stored in ref_iterator::flags. Other bits are for internal use |
272 | | * only: |
273 | | */ |
274 | | |
275 | | /* Reference is a symbolic reference. */ |
276 | 0 | #define REF_ISSYMREF 0x01 |
277 | | |
278 | | /* Reference is a packed reference. */ |
279 | 0 | #define REF_ISPACKED 0x02 |
280 | | |
281 | | /* |
282 | | * Reference cannot be resolved to an object name: dangling symbolic |
283 | | * reference (directly or indirectly), corrupt reference file, |
284 | | * reference exists but name is bad, or symbolic reference refers to |
285 | | * ill-formatted reference name. |
286 | | */ |
287 | 0 | #define REF_ISBROKEN 0x04 |
288 | | |
289 | | /* |
290 | | * Reference name is not well formed. |
291 | | * |
292 | | * See git-check-ref-format(1) for the definition of well formed ref names. |
293 | | */ |
294 | 0 | #define REF_BAD_NAME 0x08 |
295 | | |
296 | | /* |
297 | | * The signature for the callback function for the for_each_*() |
298 | | * functions below. The memory pointed to by the refname and oid |
299 | | * arguments is only guaranteed to be valid for the duration of a |
300 | | * single callback invocation. |
301 | | */ |
302 | | typedef int each_ref_fn(const char *refname, const char *referent, |
303 | | const struct object_id *oid, int flags, void *cb_data); |
304 | | |
305 | | /* |
306 | | * The following functions invoke the specified callback function for |
307 | | * each reference indicated. If the function ever returns a nonzero |
308 | | * value, stop the iteration and return that value. Please note that |
309 | | * it is not safe to modify references while an iteration is in |
310 | | * progress, unless the same callback function invocation that |
311 | | * modifies the reference also returns a nonzero value to immediately |
312 | | * stop the iteration. Returned references are sorted. |
313 | | */ |
314 | | int refs_head_ref(struct ref_store *refs, |
315 | | each_ref_fn fn, void *cb_data); |
316 | | int refs_for_each_ref(struct ref_store *refs, |
317 | | each_ref_fn fn, void *cb_data); |
318 | | int refs_for_each_ref_in(struct ref_store *refs, const char *prefix, |
319 | | each_ref_fn fn, void *cb_data); |
320 | | int refs_for_each_tag_ref(struct ref_store *refs, |
321 | | each_ref_fn fn, void *cb_data); |
322 | | int refs_for_each_branch_ref(struct ref_store *refs, |
323 | | each_ref_fn fn, void *cb_data); |
324 | | int refs_for_each_remote_ref(struct ref_store *refs, |
325 | | each_ref_fn fn, void *cb_data); |
326 | | int refs_for_each_replace_ref(struct ref_store *refs, |
327 | | each_ref_fn fn, void *cb_data); |
328 | | |
329 | | /* |
330 | | * references matching any pattern in "exclude_patterns" are omitted from the |
331 | | * result set on a best-effort basis. |
332 | | */ |
333 | | int refs_for_each_fullref_in(struct ref_store *refs, const char *prefix, |
334 | | const char **exclude_patterns, |
335 | | each_ref_fn fn, void *cb_data); |
336 | | |
337 | | /** |
338 | | * iterate all refs in "patterns" by partitioning patterns into disjoint sets |
339 | | * and iterating the longest-common prefix of each set. |
340 | | * |
341 | | * references matching any pattern in "exclude_patterns" are omitted from the |
342 | | * result set on a best-effort basis. |
343 | | * |
344 | | * callers should be prepared to ignore references that they did not ask for. |
345 | | */ |
346 | | int refs_for_each_fullref_in_prefixes(struct ref_store *refs, |
347 | | const char *namespace, |
348 | | const char **patterns, |
349 | | const char **exclude_patterns, |
350 | | each_ref_fn fn, void *cb_data); |
351 | | |
352 | | /* iterates all refs that match the specified glob pattern. */ |
353 | | int refs_for_each_glob_ref(struct ref_store *refs, each_ref_fn fn, |
354 | | const char *pattern, void *cb_data); |
355 | | |
356 | | int refs_for_each_glob_ref_in(struct ref_store *refs, each_ref_fn fn, |
357 | | const char *pattern, const char *prefix, void *cb_data); |
358 | | |
359 | | int refs_head_ref_namespaced(struct ref_store *refs, each_ref_fn fn, void *cb_data); |
360 | | |
361 | | /* |
362 | | * references matching any pattern in "exclude_patterns" are omitted from the |
363 | | * result set on a best-effort basis. |
364 | | */ |
365 | | int refs_for_each_namespaced_ref(struct ref_store *refs, |
366 | | const char **exclude_patterns, |
367 | | each_ref_fn fn, void *cb_data); |
368 | | |
369 | | /* can be used to learn about broken ref and symref */ |
370 | | int refs_for_each_rawref(struct ref_store *refs, each_ref_fn fn, void *cb_data); |
371 | | |
372 | | /* |
373 | | * Iterates over all refs including root refs, i.e. pseudorefs and HEAD. |
374 | | */ |
375 | | int refs_for_each_include_root_refs(struct ref_store *refs, each_ref_fn fn, |
376 | | void *cb_data); |
377 | | |
378 | | /* |
379 | | * Normalizes partial refs to their fully qualified form. |
380 | | * Will prepend <prefix> to the <pattern> if it doesn't start with 'refs/'. |
381 | | * <prefix> will default to 'refs/' if NULL. |
382 | | * |
383 | | * item.string will be set to the result. |
384 | | * item.util will be set to NULL if <pattern> contains glob characters, or |
385 | | * non-NULL if it doesn't. |
386 | | */ |
387 | | void normalize_glob_ref(struct string_list_item *item, const char *prefix, |
388 | | const char *pattern); |
389 | | |
390 | | static inline const char *has_glob_specials(const char *pattern) |
391 | 0 | { |
392 | 0 | return strpbrk(pattern, "?*["); |
393 | 0 | } Unexecuted instantiation: am.c:has_glob_specials Unexecuted instantiation: bisect.c:has_glob_specials Unexecuted instantiation: blame.c:has_glob_specials Unexecuted instantiation: branch.c:has_glob_specials Unexecuted instantiation: bugreport.c:has_glob_specials Unexecuted instantiation: bundle.c:has_glob_specials Unexecuted instantiation: check-attr.c:has_glob_specials Unexecuted instantiation: check-ref-format.c:has_glob_specials Unexecuted instantiation: checkout-index.c:has_glob_specials Unexecuted instantiation: checkout.c:has_glob_specials Unexecuted instantiation: clean.c:has_glob_specials Unexecuted instantiation: clone.c:has_glob_specials Unexecuted instantiation: config.c:has_glob_specials Unexecuted instantiation: describe.c:has_glob_specials Unexecuted instantiation: diff-index.c:has_glob_specials Unexecuted instantiation: diff.c:has_glob_specials Unexecuted instantiation: difftool.c:has_glob_specials Unexecuted instantiation: fast-export.c:has_glob_specials Unexecuted instantiation: fast-import.c:has_glob_specials Unexecuted instantiation: fetch.c:has_glob_specials Unexecuted instantiation: fsck.c:has_glob_specials Unexecuted instantiation: gc.c:has_glob_specials Unexecuted instantiation: grep.c:has_glob_specials Unexecuted instantiation: hash-object.c:has_glob_specials Unexecuted instantiation: help.c:has_glob_specials Unexecuted instantiation: index-pack.c:has_glob_specials Unexecuted instantiation: init-db.c:has_glob_specials Unexecuted instantiation: log.c:has_glob_specials Unexecuted instantiation: ls-files.c:has_glob_specials Unexecuted instantiation: merge-file.c:has_glob_specials Unexecuted instantiation: merge.c:has_glob_specials Unexecuted instantiation: mv.c:has_glob_specials Unexecuted instantiation: name-rev.c:has_glob_specials Unexecuted instantiation: notes.c:has_glob_specials Unexecuted instantiation: pack-objects.c:has_glob_specials Unexecuted instantiation: pack-refs.c:has_glob_specials Unexecuted instantiation: patch-id.c:has_glob_specials Unexecuted instantiation: pull.c:has_glob_specials Unexecuted instantiation: read-tree.c:has_glob_specials Unexecuted instantiation: rebase.c:has_glob_specials Unexecuted instantiation: receive-pack.c:has_glob_specials Unexecuted instantiation: reflog.c:has_glob_specials Unexecuted instantiation: refs.c:has_glob_specials Unexecuted instantiation: remote.c:has_glob_specials Unexecuted instantiation: repack.c:has_glob_specials Unexecuted instantiation: replace.c:has_glob_specials Unexecuted instantiation: replay.c:has_glob_specials Unexecuted instantiation: reset.c:has_glob_specials Unexecuted instantiation: rev-parse.c:has_glob_specials Unexecuted instantiation: rm.c:has_glob_specials Unexecuted instantiation: shortlog.c:has_glob_specials Unexecuted instantiation: show-branch.c:has_glob_specials Unexecuted instantiation: show-ref.c:has_glob_specials Unexecuted instantiation: sparse-checkout.c:has_glob_specials Unexecuted instantiation: stash.c:has_glob_specials Unexecuted instantiation: stripspace.c:has_glob_specials Unexecuted instantiation: submodule--helper.c:has_glob_specials Unexecuted instantiation: symbolic-ref.c:has_glob_specials Unexecuted instantiation: tag.c:has_glob_specials Unexecuted instantiation: update-index.c:has_glob_specials Unexecuted instantiation: update-ref.c:has_glob_specials Unexecuted instantiation: var.c:has_glob_specials Unexecuted instantiation: worktree.c:has_glob_specials Unexecuted instantiation: git.c:has_glob_specials Unexecuted instantiation: add-interactive.c:has_glob_specials Unexecuted instantiation: apply.c:has_glob_specials Unexecuted instantiation: archive.c:has_glob_specials Unexecuted instantiation: attr.c:has_glob_specials Unexecuted instantiation: bundle-uri.c:has_glob_specials Unexecuted instantiation: combine-diff.c:has_glob_specials Unexecuted instantiation: commit-graph.c:has_glob_specials Unexecuted instantiation: commit.c:has_glob_specials Unexecuted instantiation: connect.c:has_glob_specials Unexecuted instantiation: delta-islands.c:has_glob_specials Unexecuted instantiation: diff-lib.c:has_glob_specials Unexecuted instantiation: dir.c:has_glob_specials Unexecuted instantiation: environment.c:has_glob_specials Unexecuted instantiation: fetch-pack.c:has_glob_specials Unexecuted instantiation: fmt-merge-msg.c:has_glob_specials Unexecuted instantiation: hook.c:has_glob_specials Unexecuted instantiation: line-log.c:has_glob_specials Unexecuted instantiation: log-tree.c:has_glob_specials Unexecuted instantiation: mailmap.c:has_glob_specials Unexecuted instantiation: merge-ort.c:has_glob_specials Unexecuted instantiation: midx-write.c:has_glob_specials Unexecuted instantiation: notes-cache.c:has_glob_specials Unexecuted instantiation: notes-merge.c:has_glob_specials Unexecuted instantiation: notes-utils.c:has_glob_specials Unexecuted instantiation: object-file.c:has_glob_specials Unexecuted instantiation: object-name.c:has_glob_specials Unexecuted instantiation: pack-bitmap-write.c:has_glob_specials Unexecuted instantiation: parse-options-cb.c:has_glob_specials Unexecuted instantiation: path.c:has_glob_specials Unexecuted instantiation: pathspec.c:has_glob_specials Unexecuted instantiation: pseudo-merge.c:has_glob_specials Unexecuted instantiation: reachable.c:has_glob_specials Unexecuted instantiation: read-cache.c:has_glob_specials Unexecuted instantiation: ref-filter.c:has_glob_specials Unexecuted instantiation: reflog-walk.c:has_glob_specials Unexecuted instantiation: debug.c:has_glob_specials Unexecuted instantiation: files-backend.c:has_glob_specials Unexecuted instantiation: reftable-backend.c:has_glob_specials Unexecuted instantiation: iterator.c:has_glob_specials Unexecuted instantiation: packed-backend.c:has_glob_specials Unexecuted instantiation: ref-cache.c:has_glob_specials Unexecuted instantiation: refspec.c:has_glob_specials Unexecuted instantiation: replace-object.c:has_glob_specials Unexecuted instantiation: repository.c:has_glob_specials Unexecuted instantiation: revision.c:has_glob_specials Unexecuted instantiation: sequencer.c:has_glob_specials Unexecuted instantiation: server-info.c:has_glob_specials Unexecuted instantiation: setup.c:has_glob_specials Unexecuted instantiation: shallow.c:has_glob_specials Unexecuted instantiation: submodule.c:has_glob_specials Unexecuted instantiation: symlinks.c:has_glob_specials Unexecuted instantiation: trace.c:has_glob_specials Unexecuted instantiation: transport-helper.c:has_glob_specials Unexecuted instantiation: transport.c:has_glob_specials Unexecuted instantiation: unpack-trees.c:has_glob_specials Unexecuted instantiation: upload-pack.c:has_glob_specials Unexecuted instantiation: wt-status.c:has_glob_specials Unexecuted instantiation: ls-refs.c:has_glob_specials Unexecuted instantiation: default.c:has_glob_specials Unexecuted instantiation: skipping.c:has_glob_specials Unexecuted instantiation: common-main.c:has_glob_specials |
394 | | |
395 | | void refs_warn_dangling_symref(struct ref_store *refs, FILE *fp, |
396 | | const char *msg_fmt, const char *refname); |
397 | | void refs_warn_dangling_symrefs(struct ref_store *refs, FILE *fp, |
398 | | const char *msg_fmt, const struct string_list *refnames); |
399 | | |
400 | | /* |
401 | | * Flags for controlling behaviour of pack_refs() |
402 | | * PACK_REFS_PRUNE: Prune loose refs after packing |
403 | | * PACK_REFS_AUTO: Pack refs on a best effort basis. The heuristics and end |
404 | | * result are decided by the ref backend. Backends may ignore |
405 | | * this flag and fall back to a normal repack. |
406 | | */ |
407 | 0 | #define PACK_REFS_PRUNE (1 << 0) |
408 | 0 | #define PACK_REFS_AUTO (1 << 1) |
409 | | |
410 | | struct pack_refs_opts { |
411 | | unsigned int flags; |
412 | | struct ref_exclusions *exclusions; |
413 | | struct string_list *includes; |
414 | | }; |
415 | | |
416 | | /* |
417 | | * Write a packed-refs file for the current repository. |
418 | | * flags: Combination of the above PACK_REFS_* flags. |
419 | | */ |
420 | | int refs_pack_refs(struct ref_store *refs, struct pack_refs_opts *opts); |
421 | | |
422 | | /* |
423 | | * Setup reflog before using. Fill in err and return -1 on failure. |
424 | | */ |
425 | | int refs_create_reflog(struct ref_store *refs, const char *refname, |
426 | | struct strbuf *err); |
427 | | |
428 | | /** |
429 | | * Reads log for the value of ref during at_time (in which case "cnt" should be |
430 | | * negative) or the reflog "cnt" entries from the top (in which case "at_time" |
431 | | * should be 0). |
432 | | * |
433 | | * If we found the reflog entry in question, returns 0 (and details of the |
434 | | * entry can be found in the out-parameters). |
435 | | * |
436 | | * If we ran out of reflog entries, the out-parameters are filled with the |
437 | | * details of the oldest entry we did find, and the function returns 1. Note |
438 | | * that there is one important special case here! If the reflog was empty |
439 | | * and the caller asked for the 0-th cnt, we will return "1" but leave the |
440 | | * "oid" field untouched. |
441 | | **/ |
442 | | int read_ref_at(struct ref_store *refs, |
443 | | const char *refname, unsigned int flags, |
444 | | timestamp_t at_time, int cnt, |
445 | | struct object_id *oid, char **msg, |
446 | | timestamp_t *cutoff_time, int *cutoff_tz, int *cutoff_cnt); |
447 | | |
448 | | /** Check if a particular reflog exists */ |
449 | | int refs_reflog_exists(struct ref_store *refs, const char *refname); |
450 | | |
451 | | /* |
452 | | * Delete the specified reference. If old_oid is non-NULL, then |
453 | | * verify that the current value of the reference is old_oid before |
454 | | * deleting it. If old_oid is NULL, delete the reference if it |
455 | | * exists, regardless of its old value. It is an error for old_oid to |
456 | | * be null_oid. msg and flags are passed through to |
457 | | * ref_transaction_delete(). |
458 | | */ |
459 | | int refs_delete_ref(struct ref_store *refs, const char *msg, |
460 | | const char *refname, |
461 | | const struct object_id *old_oid, |
462 | | unsigned int flags); |
463 | | |
464 | | /* |
465 | | * Delete the specified references. If there are any problems, emit |
466 | | * errors but attempt to keep going (i.e., the deletes are not done in |
467 | | * an all-or-nothing transaction). msg and flags are passed through to |
468 | | * ref_transaction_delete(). |
469 | | */ |
470 | | int refs_delete_refs(struct ref_store *refs, const char *msg, |
471 | | struct string_list *refnames, unsigned int flags); |
472 | | |
473 | | /** Delete a reflog */ |
474 | | int refs_delete_reflog(struct ref_store *refs, const char *refname); |
475 | | |
476 | | /* |
477 | | * Callback to process a reflog entry found by the iteration functions (see |
478 | | * below). |
479 | | * |
480 | | * The committer parameter is a single string, in the form |
481 | | * "$GIT_COMMITTER_NAME <$GIT_COMMITTER_EMAIL>" (without double quotes). |
482 | | * |
483 | | * The timestamp parameter gives the time when entry was created as the number |
484 | | * of seconds since the UNIX epoch. |
485 | | * |
486 | | * The tz parameter gives the timezone offset for the user who created |
487 | | * the reflog entry, and its value gives a positive or negative offset |
488 | | * from UTC. Its absolute value is formed by multiplying the hour |
489 | | * part by 100 and adding the minute part. For example, 1 hour ahead |
490 | | * of UTC, CET == "+0100", is represented as positive one hundred (not |
491 | | * postiive sixty). |
492 | | * |
493 | | * The msg parameter is a single complete line; a reflog message given |
494 | | * to refs_delete_ref, refs_update_ref, etc. is returned to the |
495 | | * callback normalized---each run of whitespaces are squashed into a |
496 | | * single whitespace, trailing whitespace, if exists, is trimmed, and |
497 | | * then a single LF is added at the end. |
498 | | * |
499 | | * The cb_data is a caller-supplied pointer given to the iterator |
500 | | * functions. |
501 | | */ |
502 | | typedef int each_reflog_ent_fn( |
503 | | struct object_id *old_oid, struct object_id *new_oid, |
504 | | const char *committer, timestamp_t timestamp, |
505 | | int tz, const char *msg, void *cb_data); |
506 | | |
507 | | /* Iterate over reflog entries in the log for `refname`. */ |
508 | | |
509 | | /* oldest entry first */ |
510 | | int refs_for_each_reflog_ent(struct ref_store *refs, const char *refname, |
511 | | each_reflog_ent_fn fn, void *cb_data); |
512 | | |
513 | | /* youngest entry first */ |
514 | | int refs_for_each_reflog_ent_reverse(struct ref_store *refs, |
515 | | const char *refname, |
516 | | each_reflog_ent_fn fn, |
517 | | void *cb_data); |
518 | | |
519 | | /* |
520 | | * The signature for the callback function for the refs_for_each_reflog() |
521 | | * functions below. The memory pointed to by the refname argument is only |
522 | | * guaranteed to be valid for the duration of a single callback invocation. |
523 | | */ |
524 | | typedef int each_reflog_fn(const char *refname, void *cb_data); |
525 | | |
526 | | /* |
527 | | * Calls the specified function for each reflog file until it returns nonzero, |
528 | | * and returns the value. Reflog file order is unspecified. |
529 | | */ |
530 | | int refs_for_each_reflog(struct ref_store *refs, each_reflog_fn fn, void *cb_data); |
531 | | |
532 | 0 | #define REFNAME_ALLOW_ONELEVEL 1 |
533 | 0 | #define REFNAME_REFSPEC_PATTERN 2 |
534 | | |
535 | | /* |
536 | | * Return 0 iff refname has the correct format for a refname according |
537 | | * to the rules described in Documentation/git-check-ref-format.txt. |
538 | | * If REFNAME_ALLOW_ONELEVEL is set in flags, then accept one-level |
539 | | * reference names. If REFNAME_REFSPEC_PATTERN is set in flags, then |
540 | | * allow a single "*" wildcard character in the refspec. No leading or |
541 | | * repeated slashes are accepted. |
542 | | */ |
543 | | int check_refname_format(const char *refname, int flags); |
544 | | |
545 | | /* |
546 | | * Check the reference database for consistency. Return 0 if refs and |
547 | | * reflogs are consistent, and non-zero otherwise. The errors will be |
548 | | * written to stderr. |
549 | | */ |
550 | | int refs_fsck(struct ref_store *refs, struct fsck_options *o); |
551 | | |
552 | | /* |
553 | | * Apply the rules from check_refname_format, but mutate the result until it |
554 | | * is acceptable, and place the result in "out". |
555 | | */ |
556 | | void sanitize_refname_component(const char *refname, struct strbuf *out); |
557 | | |
558 | | const char *prettify_refname(const char *refname); |
559 | | |
560 | | char *refs_shorten_unambiguous_ref(struct ref_store *refs, |
561 | | const char *refname, int strict); |
562 | | |
563 | | /** rename ref, return 0 on success **/ |
564 | | int refs_rename_ref(struct ref_store *refs, const char *oldref, |
565 | | const char *newref, const char *logmsg); |
566 | | |
567 | | /** copy ref, return 0 on success **/ |
568 | | int refs_copy_existing_ref(struct ref_store *refs, const char *oldref, |
569 | | const char *newref, const char *logmsg); |
570 | | |
571 | | int refs_update_symref(struct ref_store *refs, const char *refname, |
572 | | const char *target, const char *logmsg); |
573 | | |
574 | | enum action_on_err { |
575 | | UPDATE_REFS_MSG_ON_ERR, |
576 | | UPDATE_REFS_DIE_ON_ERR, |
577 | | UPDATE_REFS_QUIET_ON_ERR |
578 | | }; |
579 | | |
580 | | /* |
581 | | * Begin a reference transaction. The reference transaction must |
582 | | * be freed by calling ref_transaction_free(). |
583 | | */ |
584 | | struct ref_transaction *ref_store_transaction_begin(struct ref_store *refs, |
585 | | struct strbuf *err); |
586 | | |
587 | | /* |
588 | | * Reference transaction updates |
589 | | * |
590 | | * The following four functions add a reference check or update to a |
591 | | * ref_transaction. They have some common similar parameters: |
592 | | * |
593 | | * transaction -- a pointer to an open ref_transaction, obtained |
594 | | * from ref_transaction_begin(). |
595 | | * |
596 | | * refname -- the name of the reference to be affected. |
597 | | * |
598 | | * new_oid -- the object ID that should be set to be the new value |
599 | | * of the reference. Some functions allow this parameter to be |
600 | | * NULL, meaning that the reference is not changed, or |
601 | | * null_oid, meaning that the reference should be deleted. A |
602 | | * copy of this value is made in the transaction. |
603 | | * |
604 | | * old_oid -- the object ID that the reference must have before |
605 | | * the update. Some functions allow this parameter to be NULL, |
606 | | * meaning that the old value of the reference is not checked, |
607 | | * or null_oid, meaning that the reference must not exist |
608 | | * before the update. A copy of this value is made in the |
609 | | * transaction. |
610 | | * |
611 | | * new_target -- the target reference that the reference will be |
612 | | * updated to point to. If the reference is a regular reference, |
613 | | * it will be converted to a symbolic reference. Cannot be set |
614 | | * together with `new_oid`. A copy of this value is made in the |
615 | | * transaction. |
616 | | * |
617 | | * old_target -- the reference that the reference must be pointing to. |
618 | | * Canont be set together with `old_oid`. A copy of this value is |
619 | | * made in the transaction. |
620 | | * |
621 | | * flags -- flags affecting the update, passed to |
622 | | * update_ref_lock(). Possible flags: REF_NO_DEREF, |
623 | | * REF_FORCE_CREATE_REFLOG. See those constants for more |
624 | | * information. |
625 | | * |
626 | | * msg -- a message describing the change (for the reflog). |
627 | | * |
628 | | * err -- a strbuf for receiving a description of any error that |
629 | | * might have occurred. |
630 | | * |
631 | | * The functions make internal copies of refname and msg, so the |
632 | | * caller retains ownership of these parameters. |
633 | | * |
634 | | * The functions return 0 on success and non-zero on failure. A |
635 | | * failure means that the transaction as a whole has failed and needs |
636 | | * to be rolled back. |
637 | | */ |
638 | | |
639 | | /* |
640 | | * The following flags can be passed to ref_transaction_update() etc. |
641 | | * Internally, they are stored in `ref_update::flags`, along with some |
642 | | * internal flags. |
643 | | */ |
644 | | |
645 | | /* |
646 | | * Act on the ref directly; i.e., without dereferencing symbolic refs. |
647 | | * If this flag is not specified, then symbolic references are |
648 | | * dereferenced and the update is applied to the referent. |
649 | | */ |
650 | 0 | #define REF_NO_DEREF (1 << 0) |
651 | | |
652 | | /* |
653 | | * Force the creation of a reflog for this reference, even if it |
654 | | * didn't previously have a reflog. |
655 | | */ |
656 | 0 | #define REF_FORCE_CREATE_REFLOG (1 << 1) |
657 | | |
658 | | /* |
659 | | * Blindly write an object_id. This is useful for testing data corruption |
660 | | * scenarios. |
661 | | */ |
662 | 0 | #define REF_SKIP_OID_VERIFICATION (1 << 10) |
663 | | |
664 | | /* |
665 | | * Skip verifying refname. This is useful for testing data corruption scenarios. |
666 | | */ |
667 | 0 | #define REF_SKIP_REFNAME_VERIFICATION (1 << 11) |
668 | | |
669 | | /* |
670 | | * Skip creation of a reflog entry, even if it would have otherwise been |
671 | | * created. |
672 | | */ |
673 | 0 | #define REF_SKIP_CREATE_REFLOG (1 << 12) |
674 | | |
675 | | /* |
676 | | * Bitmask of all of the flags that are allowed to be passed in to |
677 | | * ref_transaction_update() and friends: |
678 | | */ |
679 | | #define REF_TRANSACTION_UPDATE_ALLOWED_FLAGS \ |
680 | 0 | (REF_NO_DEREF | REF_FORCE_CREATE_REFLOG | REF_SKIP_OID_VERIFICATION | \ |
681 | 0 | REF_SKIP_REFNAME_VERIFICATION | REF_SKIP_CREATE_REFLOG) |
682 | | |
683 | | /* |
684 | | * Add a reference update to transaction. `new_oid` is the value that |
685 | | * the reference should have after the update, or `null_oid` if it |
686 | | * should be deleted. If `new_oid` is NULL, then the reference is not |
687 | | * changed at all. `old_oid` is the value that the reference must have |
688 | | * before the update, or `null_oid` if it must not have existed |
689 | | * beforehand. The old value is checked after the lock is taken to |
690 | | * prevent races. If the old value doesn't agree with old_oid, the |
691 | | * whole transaction fails. If old_oid is NULL, then the previous |
692 | | * value is not checked. If `old_target` is not NULL, treat the reference |
693 | | * as a symbolic ref and validate that its target before the update is |
694 | | * `old_target`. If the `new_target` is not NULL, then the reference |
695 | | * will be updated to a symbolic ref which targets `new_target`. |
696 | | * Together, these allow us to update between regular refs and symrefs. |
697 | | * |
698 | | * See the above comment "Reference transaction updates" for more |
699 | | * information. |
700 | | */ |
701 | | int ref_transaction_update(struct ref_transaction *transaction, |
702 | | const char *refname, |
703 | | const struct object_id *new_oid, |
704 | | const struct object_id *old_oid, |
705 | | const char *new_target, |
706 | | const char *old_target, |
707 | | unsigned int flags, const char *msg, |
708 | | struct strbuf *err); |
709 | | |
710 | | /* |
711 | | * Add a reference creation to transaction. new_oid is the value that |
712 | | * the reference should have after the update; it must not be |
713 | | * null_oid. It is verified that the reference does not exist |
714 | | * already. |
715 | | * |
716 | | * See the above comment "Reference transaction updates" for more |
717 | | * information. |
718 | | */ |
719 | | int ref_transaction_create(struct ref_transaction *transaction, |
720 | | const char *refname, |
721 | | const struct object_id *new_oid, |
722 | | const char *new_target, |
723 | | unsigned int flags, const char *msg, |
724 | | struct strbuf *err); |
725 | | |
726 | | /* |
727 | | * Add a reference deletion to transaction. If old_oid is non-NULL, |
728 | | * then it holds the value that the reference should have had before |
729 | | * the update (which must not be null_oid). |
730 | | * |
731 | | * See the above comment "Reference transaction updates" for more |
732 | | * information. |
733 | | */ |
734 | | int ref_transaction_delete(struct ref_transaction *transaction, |
735 | | const char *refname, |
736 | | const struct object_id *old_oid, |
737 | | const char *old_target, |
738 | | unsigned int flags, |
739 | | const char *msg, |
740 | | struct strbuf *err); |
741 | | |
742 | | /* |
743 | | * Verify, within a transaction, that refname has the value old_oid, |
744 | | * or, if old_oid is null_oid, then verify that the reference |
745 | | * doesn't exist. old_oid must be non-NULL. |
746 | | * |
747 | | * See the above comment "Reference transaction updates" for more |
748 | | * information. |
749 | | */ |
750 | | int ref_transaction_verify(struct ref_transaction *transaction, |
751 | | const char *refname, |
752 | | const struct object_id *old_oid, |
753 | | const char *old_target, |
754 | | unsigned int flags, |
755 | | struct strbuf *err); |
756 | | |
757 | | /* Naming conflict (for example, the ref names A and A/B conflict). */ |
758 | 0 | #define TRANSACTION_NAME_CONFLICT -1 |
759 | | /* All other errors. */ |
760 | 0 | #define TRANSACTION_GENERIC_ERROR -2 |
761 | | |
762 | | /* |
763 | | * Perform the preparatory stages of committing `transaction`. Acquire |
764 | | * any needed locks, check preconditions, etc.; basically, do as much |
765 | | * as possible to ensure that the transaction will be able to go |
766 | | * through, stopping just short of making any irrevocable or |
767 | | * user-visible changes. The updates that this function prepares can |
768 | | * be finished up by calling `ref_transaction_commit()` or rolled back |
769 | | * by calling `ref_transaction_abort()`. |
770 | | * |
771 | | * On success, return 0 and leave the transaction in "prepared" state. |
772 | | * On failure, abort the transaction, write an error message to `err`, |
773 | | * and return one of the `TRANSACTION_*` constants. |
774 | | * |
775 | | * Callers who don't need such fine-grained control over committing |
776 | | * reference transactions should just call `ref_transaction_commit()`. |
777 | | */ |
778 | | int ref_transaction_prepare(struct ref_transaction *transaction, |
779 | | struct strbuf *err); |
780 | | |
781 | | /* |
782 | | * Commit all of the changes that have been queued in transaction, as |
783 | | * atomically as possible. On success, return 0 and leave the |
784 | | * transaction in "closed" state. On failure, roll back the |
785 | | * transaction, write an error message to `err`, and return one of the |
786 | | * `TRANSACTION_*` constants |
787 | | */ |
788 | | int ref_transaction_commit(struct ref_transaction *transaction, |
789 | | struct strbuf *err); |
790 | | |
791 | | /* |
792 | | * Abort `transaction`, which has been begun and possibly prepared, |
793 | | * but not yet committed. |
794 | | */ |
795 | | int ref_transaction_abort(struct ref_transaction *transaction, |
796 | | struct strbuf *err); |
797 | | |
798 | | /* |
799 | | * Like ref_transaction_commit(), but optimized for creating |
800 | | * references when originally initializing a repository (e.g., by "git |
801 | | * clone"). It writes the new references directly to packed-refs |
802 | | * without locking the individual references. |
803 | | * |
804 | | * It is a bug to call this function when there might be other |
805 | | * processes accessing the repository or if there are existing |
806 | | * references that might conflict with the ones being created. All |
807 | | * old_oid values must either be absent or null_oid. |
808 | | */ |
809 | | int initial_ref_transaction_commit(struct ref_transaction *transaction, |
810 | | struct strbuf *err); |
811 | | |
812 | | /* |
813 | | * Execute the given callback function for each of the reference updates which |
814 | | * have been queued in the given transaction. `old_oid` and `new_oid` may be |
815 | | * `NULL` pointers depending on whether the update has these object IDs set or |
816 | | * not. |
817 | | */ |
818 | | typedef void ref_transaction_for_each_queued_update_fn(const char *refname, |
819 | | const struct object_id *old_oid, |
820 | | const struct object_id *new_oid, |
821 | | void *cb_data); |
822 | | void ref_transaction_for_each_queued_update(struct ref_transaction *transaction, |
823 | | ref_transaction_for_each_queued_update_fn cb, |
824 | | void *cb_data); |
825 | | |
826 | | /* |
827 | | * Free `*transaction` and all associated data. |
828 | | */ |
829 | | void ref_transaction_free(struct ref_transaction *transaction); |
830 | | |
831 | | /** |
832 | | * Lock, update, and unlock a single reference. This function |
833 | | * basically does a transaction containing a single call to |
834 | | * ref_transaction_update(). The parameters to this function have the |
835 | | * same meaning as the corresponding parameters to |
836 | | * ref_transaction_update(). Handle errors as requested by the `onerr` |
837 | | * argument. |
838 | | */ |
839 | | int refs_update_ref(struct ref_store *refs, const char *msg, const char *refname, |
840 | | const struct object_id *new_oid, const struct object_id *old_oid, |
841 | | unsigned int flags, enum action_on_err onerr); |
842 | | |
843 | | int parse_hide_refs_config(const char *var, const char *value, const char *, |
844 | | struct strvec *); |
845 | | |
846 | | /* |
847 | | * Check whether a ref is hidden. If no namespace is set, both the first and |
848 | | * the second parameter point to the full ref name. If a namespace is set and |
849 | | * the ref is inside that namespace, the first parameter is a pointer to the |
850 | | * name of the ref with the namespace prefix removed. If a namespace is set and |
851 | | * the ref is outside that namespace, the first parameter is NULL. The second |
852 | | * parameter always points to the full ref name. |
853 | | */ |
854 | | int ref_is_hidden(const char *, const char *, const struct strvec *); |
855 | | |
856 | | /* |
857 | | * Returns an array of patterns to use as excluded_patterns, if none of the |
858 | | * hidden references use the token '!' or '^'. |
859 | | */ |
860 | | const char **hidden_refs_to_excludes(const struct strvec *hide_refs); |
861 | | |
862 | | /* Is this a per-worktree ref living in the refs/ namespace? */ |
863 | | int is_per_worktree_ref(const char *refname); |
864 | | |
865 | | /* Describes how a refname relates to worktrees */ |
866 | | enum ref_worktree_type { |
867 | | REF_WORKTREE_CURRENT, /* implicitly per worktree, eg. HEAD or |
868 | | refs/bisect/SOMETHING */ |
869 | | REF_WORKTREE_MAIN, /* explicitly in main worktree, eg. |
870 | | main-worktree/HEAD */ |
871 | | REF_WORKTREE_OTHER, /* explicitly in named worktree, eg. |
872 | | worktrees/bla/HEAD */ |
873 | | REF_WORKTREE_SHARED, /* the default, eg. refs/heads/main */ |
874 | | }; |
875 | | |
876 | | /* |
877 | | * Parse a `maybe_worktree_ref` as a ref that possibly refers to a worktree ref |
878 | | * (ie. either REFNAME, main-worktree/REFNAME or worktree/WORKTREE/REFNAME). It |
879 | | * returns what kind of ref was found, and in case of REF_WORKTREE_OTHER, the |
880 | | * worktree name is returned in `worktree_name` (pointing into |
881 | | * `maybe_worktree_ref`) and `worktree_name_length`. The bare refname (the |
882 | | * refname stripped of prefixes) is returned in `bare_refname`. The |
883 | | * `worktree_name`, `worktree_name_length` and `bare_refname` arguments may be |
884 | | * NULL. |
885 | | */ |
886 | | enum ref_worktree_type parse_worktree_ref(const char *maybe_worktree_ref, |
887 | | const char **worktree_name, |
888 | | int *worktree_name_length, |
889 | | const char **bare_refname); |
890 | | |
891 | | enum expire_reflog_flags { |
892 | | EXPIRE_REFLOGS_DRY_RUN = 1 << 0, |
893 | | EXPIRE_REFLOGS_UPDATE_REF = 1 << 1, |
894 | | EXPIRE_REFLOGS_REWRITE = 1 << 2, |
895 | | }; |
896 | | |
897 | | /* |
898 | | * The following interface is used for reflog expiration. The caller |
899 | | * calls refs_reflog_expire(), supplying it with three callback functions, |
900 | | * of the following types. The callback functions define the |
901 | | * expiration policy that is desired. |
902 | | * |
903 | | * reflog_expiry_prepare_fn -- Called once after the reference is |
904 | | * locked. Called with the OID of the locked reference. |
905 | | * |
906 | | * reflog_expiry_should_prune_fn -- Called once for each entry in the |
907 | | * existing reflog. It should return true iff that entry should be |
908 | | * pruned. |
909 | | * |
910 | | * reflog_expiry_cleanup_fn -- Called once before the reference is |
911 | | * unlocked again. |
912 | | */ |
913 | | typedef void reflog_expiry_prepare_fn(const char *refname, |
914 | | const struct object_id *oid, |
915 | | void *cb_data); |
916 | | typedef int reflog_expiry_should_prune_fn(struct object_id *ooid, |
917 | | struct object_id *noid, |
918 | | const char *email, |
919 | | timestamp_t timestamp, int tz, |
920 | | const char *message, void *cb_data); |
921 | | typedef void reflog_expiry_cleanup_fn(void *cb_data); |
922 | | |
923 | | /* |
924 | | * Expire reflog entries for the specified reference. |
925 | | * flags is a combination of the constants in |
926 | | * enum expire_reflog_flags. The three function pointers are described |
927 | | * above. On success, return zero. |
928 | | */ |
929 | | int refs_reflog_expire(struct ref_store *refs, |
930 | | const char *refname, |
931 | | unsigned int flags, |
932 | | reflog_expiry_prepare_fn prepare_fn, |
933 | | reflog_expiry_should_prune_fn should_prune_fn, |
934 | | reflog_expiry_cleanup_fn cleanup_fn, |
935 | | void *policy_cb_data); |
936 | | |
937 | | struct ref_store *get_main_ref_store(struct repository *r); |
938 | | |
939 | | /** |
940 | | * Submodules |
941 | | * ---------- |
942 | | * |
943 | | * If you want to iterate the refs of a submodule you first need to add the |
944 | | * submodules object database. You can do this by a code-snippet like |
945 | | * this: |
946 | | * |
947 | | * const char *path = "path/to/submodule" |
948 | | * if (add_submodule_odb(path)) |
949 | | * die("Error submodule '%s' not populated.", path); |
950 | | * |
951 | | * `add_submodule_odb()` will return zero on success. If you |
952 | | * do not do this you will get an error for each ref that it does not point |
953 | | * to a valid object. |
954 | | * |
955 | | * Note: As a side-effect of this you cannot safely assume that all |
956 | | * objects you lookup are available in superproject. All submodule objects |
957 | | * will be available the same way as the superprojects objects. |
958 | | * |
959 | | * Example: |
960 | | * -------- |
961 | | * |
962 | | * ---- |
963 | | * static int handle_remote_ref(const char *refname, |
964 | | * const unsigned char *sha1, int flags, void *cb_data) |
965 | | * { |
966 | | * struct strbuf *output = cb_data; |
967 | | * strbuf_addf(output, "%s\n", refname); |
968 | | * return 0; |
969 | | * } |
970 | | * |
971 | | */ |
972 | | |
973 | | /* |
974 | | * Return the ref_store instance for the specified submodule. For the |
975 | | * main repository, use submodule==NULL; such a call cannot fail. For |
976 | | * a submodule, the submodule must exist and be a nonbare repository, |
977 | | * otherwise return NULL. If the requested reference store has not yet |
978 | | * been initialized, initialize it first. |
979 | | * |
980 | | * For backwards compatibility, submodule=="" is treated the same as |
981 | | * submodule==NULL. |
982 | | */ |
983 | | struct ref_store *repo_get_submodule_ref_store(struct repository *repo, |
984 | | const char *submodule); |
985 | | struct ref_store *get_worktree_ref_store(const struct worktree *wt); |
986 | | |
987 | | /* |
988 | | * Some of the names specified by refs have special meaning to Git. |
989 | | * Organize these namespaces in a comon 'ref_namespace' array for |
990 | | * reference from multiple places in the codebase. |
991 | | */ |
992 | | |
993 | | struct ref_namespace_info { |
994 | | const char *ref; |
995 | | enum decoration_type decoration; |
996 | | |
997 | | /* |
998 | | * If 'exact' is true, then we must match the 'ref' exactly. |
999 | | * Otherwise, use a prefix match. |
1000 | | * |
1001 | | * 'ref_updated' is for internal use. It represents whether the |
1002 | | * 'ref' value was replaced from its original literal version. |
1003 | | */ |
1004 | | unsigned exact:1, |
1005 | | ref_updated:1; |
1006 | | }; |
1007 | | |
1008 | | enum ref_namespace { |
1009 | | NAMESPACE_HEAD, |
1010 | | NAMESPACE_BRANCHES, |
1011 | | NAMESPACE_TAGS, |
1012 | | NAMESPACE_REMOTE_REFS, |
1013 | | NAMESPACE_STASH, |
1014 | | NAMESPACE_REPLACE, |
1015 | | NAMESPACE_NOTES, |
1016 | | NAMESPACE_PREFETCH, |
1017 | | NAMESPACE_REWRITTEN, |
1018 | | |
1019 | | /* Must be last */ |
1020 | | NAMESPACE__COUNT |
1021 | | }; |
1022 | | |
1023 | | /* See refs.c for the contents of this array. */ |
1024 | | extern struct ref_namespace_info ref_namespace[NAMESPACE__COUNT]; |
1025 | | |
1026 | | /* |
1027 | | * Some ref namespaces can be modified by config values or environment |
1028 | | * variables. Modify a namespace as specified by its ref_namespace key. |
1029 | | */ |
1030 | | void update_ref_namespace(enum ref_namespace namespace, char *ref); |
1031 | | |
1032 | | /* |
1033 | | * Check whether the provided name names a root reference. This function only |
1034 | | * performs a syntactic check. |
1035 | | * |
1036 | | * A root ref is a reference that lives in the root of the reference hierarchy. |
1037 | | * These references must conform to special syntax: |
1038 | | * |
1039 | | * - Their name must be all-uppercase or underscores ("_"). |
1040 | | * |
1041 | | * - Their name must end with "_HEAD". As a special rule, "HEAD" is a root |
1042 | | * ref, as well. |
1043 | | * |
1044 | | * - Their name may not contain a slash. |
1045 | | * |
1046 | | * There is a special set of irregular root refs that exist due to historic |
1047 | | * reasons, only. This list shall not be expanded in the future: |
1048 | | * |
1049 | | * - AUTO_MERGE |
1050 | | * |
1051 | | * - BISECT_EXPECTED_REV |
1052 | | * |
1053 | | * - NOTES_MERGE_PARTIAL |
1054 | | * |
1055 | | * - NOTES_MERGE_REF |
1056 | | * |
1057 | | * - MERGE_AUTOSTASH |
1058 | | */ |
1059 | | int is_root_ref(const char *refname); |
1060 | | |
1061 | | /* |
1062 | | * Pseudorefs are refs that have different semantics compared to |
1063 | | * "normal" refs. These refs can thus not be stored in the ref backend, |
1064 | | * but must always be accessed via the filesystem. The following refs |
1065 | | * are pseudorefs: |
1066 | | * |
1067 | | * - FETCH_HEAD may contain multiple object IDs, and each one of them |
1068 | | * carries additional metadata like where it came from. |
1069 | | * |
1070 | | * - MERGE_HEAD may contain multiple object IDs when merging multiple |
1071 | | * heads. |
1072 | | * |
1073 | | * Reading, writing or deleting references must consistently go either |
1074 | | * through the filesystem (pseudorefs) or through the reference |
1075 | | * backend (normal ones). |
1076 | | */ |
1077 | | int is_pseudo_ref(const char *refname); |
1078 | | |
1079 | | /* |
1080 | | * The following flags can be passed to `repo_migrate_ref_storage_format()`: |
1081 | | * |
1082 | | * - REPO_MIGRATE_REF_STORAGE_FORMAT_DRYRUN: perform a dry-run migration |
1083 | | * without touching the main repository. The result will be written into a |
1084 | | * temporary ref storage directory. |
1085 | | */ |
1086 | 0 | #define REPO_MIGRATE_REF_STORAGE_FORMAT_DRYRUN (1 << 0) |
1087 | | |
1088 | | /* |
1089 | | * Migrate the ref storage format used by the repository to the |
1090 | | * specified one. |
1091 | | */ |
1092 | | int repo_migrate_ref_storage_format(struct repository *repo, |
1093 | | enum ref_storage_format format, |
1094 | | unsigned int flags, |
1095 | | struct strbuf *err); |
1096 | | |
1097 | | #endif /* REFS_H */ |