Line | Count | Source |
1 | | #ifndef REFS_H |
2 | | #define REFS_H |
3 | | |
4 | | #include "commit.h" |
5 | | #include "repository.h" |
6 | | #include "repo-settings.h" |
7 | | |
8 | | struct fsck_options; |
9 | | struct object_id; |
10 | | struct ref_store; |
11 | | struct strbuf; |
12 | | struct string_list; |
13 | | struct string_list_item; |
14 | | struct worktree; |
15 | | |
16 | | enum ref_storage_format ref_storage_format_by_name(const char *name); |
17 | | const char *ref_storage_format_to_name(enum ref_storage_format ref_storage_format); |
18 | | |
19 | | enum ref_transaction_error { |
20 | | /* Default error code */ |
21 | | REF_TRANSACTION_ERROR_GENERIC = -1, |
22 | | /* Ref name conflict like A vs A/B */ |
23 | | REF_TRANSACTION_ERROR_NAME_CONFLICT = -2, |
24 | | /* Ref to be created already exists */ |
25 | | REF_TRANSACTION_ERROR_CREATE_EXISTS = -3, |
26 | | /* ref expected but doesn't exist */ |
27 | | REF_TRANSACTION_ERROR_NONEXISTENT_REF = -4, |
28 | | /* Provided old_oid or old_target of reference doesn't match actual */ |
29 | | REF_TRANSACTION_ERROR_INCORRECT_OLD_VALUE = -5, |
30 | | /* Provided new_oid or new_target is invalid */ |
31 | | REF_TRANSACTION_ERROR_INVALID_NEW_VALUE = -6, |
32 | | /* Expected ref to be symref, but is a regular ref */ |
33 | | REF_TRANSACTION_ERROR_EXPECTED_SYMREF = -7, |
34 | | /* Cannot create ref due to case-insensitive filesystem */ |
35 | | REF_TRANSACTION_ERROR_CASE_CONFLICT = -8, |
36 | | }; |
37 | | |
38 | | /* |
39 | | * Resolve a reference, recursively following symbolic references. |
40 | | * |
41 | | * Return the name of the non-symbolic reference that ultimately pointed |
42 | | * at the resolved object name. The return value, if not NULL, is a |
43 | | * pointer into either a static buffer or the input ref. |
44 | | * |
45 | | * If oid is non-NULL, store the referred-to object's name in it. |
46 | | * |
47 | | * If the reference cannot be resolved to an object, the behavior |
48 | | * depends on the RESOLVE_REF_READING flag: |
49 | | * |
50 | | * - If RESOLVE_REF_READING is set, return NULL. |
51 | | * |
52 | | * - If RESOLVE_REF_READING is not set, clear oid and return the name of |
53 | | * the last reference name in the chain, which will either be a non-symbolic |
54 | | * reference or an undefined reference. If this is a prelude to |
55 | | * "writing" to the ref, the return value is the name of the ref |
56 | | * that will actually be created or changed. |
57 | | * |
58 | | * If the RESOLVE_REF_NO_RECURSE flag is passed, only resolves one |
59 | | * level of symbolic reference. The value stored in oid for a symbolic |
60 | | * reference will always be null_oid in this case, and the return |
61 | | * value is the reference that the symref refers to directly. |
62 | | * |
63 | | * If flags is non-NULL, set the value that it points to the |
64 | | * combination of REF_ISPACKED (if the reference was found among the |
65 | | * packed references), REF_ISSYMREF (if the initial reference was a |
66 | | * symbolic reference), REF_BAD_NAME (if the reference name is ill |
67 | | * formed --- see RESOLVE_REF_ALLOW_BAD_NAME below), and REF_ISBROKEN |
68 | | * (if the ref is malformed or has a bad name). See refs.h for more detail |
69 | | * on each flag. |
70 | | * |
71 | | * If ref is not a properly-formatted, normalized reference, return |
72 | | * NULL. If more than MAXDEPTH recursive symbolic lookups are needed, |
73 | | * give up and return NULL. |
74 | | * |
75 | | * RESOLVE_REF_ALLOW_BAD_NAME allows resolving refs even when their |
76 | | * name is invalid according to git-check-ref-format(1). If the name |
77 | | * is bad then the value stored in oid will be null_oid and the two |
78 | | * flags REF_ISBROKEN and REF_BAD_NAME will be set. |
79 | | * |
80 | | * Even with RESOLVE_REF_ALLOW_BAD_NAME, names that escape the refs/ |
81 | | * directory and do not consist of all caps and underscores cannot be |
82 | | * resolved. The function returns NULL for such ref names. |
83 | | * Caps and underscores refers to the pseudorefs, such as HEAD, |
84 | | * FETCH_HEAD and friends, that all live outside of the refs/ directory. |
85 | | */ |
86 | 0 | #define RESOLVE_REF_READING 0x01 |
87 | 0 | #define RESOLVE_REF_NO_RECURSE 0x02 |
88 | 0 | #define RESOLVE_REF_ALLOW_BAD_NAME 0x04 |
89 | | |
90 | | const char *refs_resolve_ref_unsafe(struct ref_store *refs, |
91 | | const char *refname, |
92 | | int resolve_flags, |
93 | | struct object_id *oid, |
94 | | int *flags); |
95 | | |
96 | | char *refs_resolve_refdup(struct ref_store *refs, |
97 | | const char *refname, int resolve_flags, |
98 | | struct object_id *oid, int *flags); |
99 | | |
100 | | int refs_read_ref_full(struct ref_store *refs, const char *refname, |
101 | | int resolve_flags, struct object_id *oid, int *flags); |
102 | | |
103 | | int refs_read_ref(struct ref_store *refs, const char *refname, struct object_id *oid); |
104 | | |
105 | 0 | #define NOT_A_SYMREF -2 |
106 | | |
107 | | /* |
108 | | * Read the symbolic ref named "refname" and write its immediate referent into |
109 | | * the provided buffer. Referent is left empty if "refname" is not a symbolic |
110 | | * ref. It does not resolve the symbolic reference recursively in case the |
111 | | * target is also a symbolic ref. |
112 | | * |
113 | | * Returns 0 on success, -2 if the "refname" is not a symbolic ref, |
114 | | * -1 otherwise. |
115 | | */ |
116 | | int refs_read_symbolic_ref(struct ref_store *ref_store, const char *refname, |
117 | | struct strbuf *referent); |
118 | | |
119 | | /* |
120 | | * Return 0 if a reference named refname could be created without |
121 | | * conflicting with the name of an existing reference. Otherwise, |
122 | | * return a negative value and write an explanation to err. If extras |
123 | | * is non-NULL, it is a list of additional refnames with which refname |
124 | | * is not allowed to conflict. If skip is non-NULL, ignore potential |
125 | | * conflicts with refs in skip (e.g., because they are scheduled for |
126 | | * deletion in the same operation). Behavior is undefined if the same |
127 | | * name is listed in both extras and skip. |
128 | | * |
129 | | * Two reference names conflict if one of them exactly matches the |
130 | | * leading components of the other; e.g., "foo/bar" conflicts with |
131 | | * both "foo" and with "foo/bar/baz" but not with "foo/bar" or |
132 | | * "foo/barbados". |
133 | | * |
134 | | * If `initial_transaction` is truish, then all collision checks with |
135 | | * preexisting refs are skipped. |
136 | | * |
137 | | * extras and skip must be sorted. |
138 | | */ |
139 | | enum ref_transaction_error refs_verify_refname_available(struct ref_store *refs, |
140 | | const char *refname, |
141 | | const struct string_list *extras, |
142 | | const struct string_list *skip, |
143 | | unsigned int initial_transaction, |
144 | | struct strbuf *err); |
145 | | |
146 | | int refs_ref_exists(struct ref_store *refs, const char *refname); |
147 | | |
148 | | int should_autocreate_reflog(enum log_refs_config log_all_ref_updates, |
149 | | const char *refname); |
150 | | |
151 | | int is_branch(const char *refname); |
152 | | |
153 | 0 | #define REF_STORE_CREATE_ON_DISK_IS_WORKTREE (1 << 0) |
154 | | |
155 | | int ref_store_create_on_disk(struct ref_store *refs, int flags, struct strbuf *err); |
156 | | |
157 | | /* |
158 | | * Release all memory and resources associated with the ref store. |
159 | | */ |
160 | | void ref_store_release(struct ref_store *ref_store); |
161 | | |
162 | | /* |
163 | | * Remove the ref store from disk. This deletes all associated data. |
164 | | */ |
165 | | int ref_store_remove_on_disk(struct ref_store *refs, struct strbuf *err); |
166 | | |
167 | | /* |
168 | | * Return the peeled value of the oid currently being iterated via |
169 | | * for_each_ref(), etc. This is equivalent to calling: |
170 | | * |
171 | | * peel_object(r, oid, &peeled); |
172 | | * |
173 | | * with the "oid" value given to the each_ref_fn callback, except |
174 | | * that some ref storage may be able to answer the query without |
175 | | * actually loading the object in memory. |
176 | | */ |
177 | | int peel_iterated_oid(struct repository *r, |
178 | | const struct object_id *base, struct object_id *peeled); |
179 | | |
180 | | /** |
181 | | * Resolve refname in the nested "gitlink" repository in the specified |
182 | | * submodule (which must be non-NULL). If the resolution is |
183 | | * successful, return 0 and set oid to the name of the object; |
184 | | * otherwise, return a non-zero value. |
185 | | */ |
186 | | int repo_resolve_gitlink_ref(struct repository *r, |
187 | | const char *submodule, const char *refname, |
188 | | struct object_id *oid); |
189 | | |
190 | | /* |
191 | | * Return true iff abbrev_name is a possible abbreviation for |
192 | | * full_name according to the rules defined by ref_rev_parse_rules in |
193 | | * refs.c. |
194 | | */ |
195 | | int refname_match(const char *abbrev_name, const char *full_name); |
196 | | |
197 | | /* |
198 | | * Given a 'prefix' expand it by the rules in 'ref_rev_parse_rules' and add |
199 | | * the results to 'prefixes' |
200 | | */ |
201 | | struct strvec; |
202 | | void expand_ref_prefix(struct strvec *prefixes, const char *prefix); |
203 | | |
204 | | int expand_ref(struct repository *r, const char *str, int len, struct object_id *oid, char **ref); |
205 | | int repo_dwim_ref(struct repository *r, const char *str, int len, |
206 | | struct object_id *oid, char **ref, int nonfatal_dangling_mark); |
207 | | int repo_dwim_log(struct repository *r, const char *str, int len, struct object_id *oid, char **ref); |
208 | | |
209 | | /* |
210 | | * Retrieves the default branch name for newly-initialized repositories. |
211 | | * |
212 | | * The return value is an allocated string. |
213 | | */ |
214 | | char *repo_default_branch_name(struct repository *r, int quiet); |
215 | | |
216 | | /* |
217 | | * Copy "name" to "sb", expanding any special @-marks as handled by |
218 | | * repo_interpret_branch_name(). The result is a non-qualified branch name |
219 | | * (so "foo" or "origin/master" instead of "refs/heads/foo" or |
220 | | * "refs/remotes/origin/master"). |
221 | | * |
222 | | * Note that the resulting name may not be a syntactically valid refname. |
223 | | * |
224 | | * If "allowed" is non-zero, restrict the set of allowed expansions. See |
225 | | * repo_interpret_branch_name() for details. |
226 | | */ |
227 | | void copy_branchname(struct strbuf *sb, const char *name, |
228 | | unsigned allowed); |
229 | | |
230 | | /* |
231 | | * Like copy_branchname() above, but confirm that the result is |
232 | | * syntactically valid to be used as a local branch name in refs/heads/. |
233 | | * |
234 | | * The return value is "0" if the result is valid, and "-1" otherwise. |
235 | | */ |
236 | | int check_branch_ref(struct strbuf *sb, const char *name); |
237 | | |
238 | | /* |
239 | | * Similar for a tag name in refs/tags/. |
240 | | * |
241 | | * The return value is "0" if the result is valid, and "-1" otherwise. |
242 | | */ |
243 | | int check_tag_ref(struct strbuf *sb, const char *name); |
244 | | |
245 | | /* |
246 | | * A ref_transaction represents a collection of reference updates that |
247 | | * should succeed or fail together. |
248 | | * |
249 | | * Calling sequence |
250 | | * ---------------- |
251 | | * |
252 | | * - Allocate and initialize a `struct ref_transaction` by calling |
253 | | * `ref_transaction_begin()`. |
254 | | * |
255 | | * - Specify the intended ref updates by calling one or more of the |
256 | | * following functions: |
257 | | * - `ref_transaction_update()` |
258 | | * - `ref_transaction_create()` |
259 | | * - `ref_transaction_delete()` |
260 | | * - `ref_transaction_verify()` |
261 | | * |
262 | | * - Then either: |
263 | | * |
264 | | * - Optionally call `ref_transaction_prepare()` to prepare the |
265 | | * transaction. This locks all references, checks preconditions, |
266 | | * etc. but doesn't finalize anything. If this step fails, the |
267 | | * transaction has been closed and can only be freed. If this step |
268 | | * succeeds, then `ref_transaction_commit()` is almost certain to |
269 | | * succeed. However, you can still call `ref_transaction_abort()` |
270 | | * if you decide not to commit the transaction after all. |
271 | | * |
272 | | * - Call `ref_transaction_commit()` to execute the transaction, |
273 | | * make the changes permanent, and release all locks. If you |
274 | | * haven't already called `ref_transaction_prepare()`, then |
275 | | * `ref_transaction_commit()` calls it for you. |
276 | | * |
277 | | * Or |
278 | | * |
279 | | * - Call `ref_transaction_begin()` with REF_TRANSACTION_FLAG_INITIAL if the |
280 | | * ref database is known to be empty and have no other writers (e.g. during |
281 | | * clone). This is likely to be much faster than without the flag. |
282 | | * |
283 | | * - Then finally, call `ref_transaction_free()` to free the |
284 | | * `ref_transaction` data structure. |
285 | | * |
286 | | * At any time before calling `ref_transaction_commit()`, you can call |
287 | | * `ref_transaction_abort()` to abort the transaction, rollback any |
288 | | * locks, and free any associated resources (including the |
289 | | * `ref_transaction` data structure). |
290 | | * |
291 | | * Putting it all together, a complete reference update looks like |
292 | | * |
293 | | * struct ref_transaction *transaction; |
294 | | * struct strbuf err = STRBUF_INIT; |
295 | | * int ret = 0; |
296 | | * |
297 | | * transaction = ref_store_transaction_begin(refs, 0, &err); |
298 | | * if (!transaction || |
299 | | * ref_transaction_update(...) || |
300 | | * ref_transaction_create(...) || |
301 | | * ...etc... || |
302 | | * ref_transaction_commit(transaction, &err)) { |
303 | | * error("%s", err.buf); |
304 | | * ret = -1; |
305 | | * } |
306 | | * ref_transaction_free(transaction); |
307 | | * strbuf_release(&err); |
308 | | * return ret; |
309 | | * |
310 | | * Error handling |
311 | | * -------------- |
312 | | * |
313 | | * On error, transaction functions append a message about what |
314 | | * went wrong to the 'err' argument. The message mentions what |
315 | | * ref was being updated (if any) when the error occurred so it |
316 | | * can be passed to 'die' or 'error' as-is. |
317 | | * |
318 | | * The message is appended to err without first clearing err. |
319 | | * err will not be '\n' terminated. |
320 | | * |
321 | | * Caveats |
322 | | * ------- |
323 | | * |
324 | | * Note that no locks are taken, and no refs are read, until |
325 | | * `ref_transaction_prepare()` or `ref_transaction_commit()` is |
326 | | * called. So, for example, `ref_transaction_verify()` won't report a |
327 | | * verification failure until the commit is attempted. |
328 | | */ |
329 | | struct ref_transaction; |
330 | | |
331 | | /* |
332 | | * Bit values set in the flags argument passed to each_ref_fn() and |
333 | | * stored in ref_iterator::flags. Other bits are for internal use |
334 | | * only: |
335 | | */ |
336 | | enum reference_status { |
337 | | /* Reference is a symbolic reference. */ |
338 | | REF_ISSYMREF = (1 << 0), |
339 | | |
340 | | /* Reference is a packed reference. */ |
341 | | REF_ISPACKED = (1 << 1), |
342 | | |
343 | | /* |
344 | | * Reference cannot be resolved to an object name: dangling symbolic |
345 | | * reference (directly or indirectly), corrupt reference file, |
346 | | * reference exists but name is bad, or symbolic reference refers to |
347 | | * ill-formatted reference name. |
348 | | */ |
349 | | REF_ISBROKEN = (1 << 2), |
350 | | |
351 | | /* |
352 | | * Reference name is not well formed. |
353 | | * |
354 | | * See git-check-ref-format(1) for the definition of well formed ref names. |
355 | | */ |
356 | | REF_BAD_NAME = (1 << 3), |
357 | | }; |
358 | | |
359 | | /* A reference passed to `for_each_ref()`-style callbacks. */ |
360 | | struct reference { |
361 | | /* The fully-qualified name of the reference. */ |
362 | | const char *name; |
363 | | |
364 | | /* The target of a symbolic ref. `NULL` for direct references. */ |
365 | | const char *target; |
366 | | |
367 | | /* |
368 | | * The object ID of a reference. Either the direct object ID or the |
369 | | * resolved object ID in the case of a symbolic ref. May be the zero |
370 | | * object ID in case the symbolic ref cannot be resolved. |
371 | | */ |
372 | | const struct object_id *oid; |
373 | | |
374 | | /* |
375 | | * An optional peeled object ID. This field _may_ be set for tags in |
376 | | * case the peeled value is present in the backend. Please refer to |
377 | | * `reference_get_peeled_oid()`. |
378 | | */ |
379 | | const struct object_id *peeled_oid; |
380 | | |
381 | | /* A bitfield of `enum reference_status` flags. */ |
382 | | unsigned flags; |
383 | | }; |
384 | | |
385 | | /* |
386 | | * Peel the tag to a non-tag commit. If present, this uses the peeled object ID |
387 | | * exposed by the reference backend. Otherwise, the object is peeled via the |
388 | | * object database, which is less efficient. |
389 | | * |
390 | | * Return `0` if the reference could be peeled, a negative error code |
391 | | * otherwise. |
392 | | */ |
393 | | int reference_get_peeled_oid(struct repository *repo, |
394 | | const struct reference *ref, |
395 | | struct object_id *peeled_oid); |
396 | | |
397 | | /* |
398 | | * The signature for the callback function for the for_each_*() |
399 | | * functions below. The memory pointed to by the `struct reference` |
400 | | * argument is only guaranteed to be valid for the duration of a |
401 | | * single callback invocation. |
402 | | */ |
403 | | typedef int each_ref_fn(const struct reference *ref, void *cb_data); |
404 | | |
405 | | /* |
406 | | * The following functions invoke the specified callback function for |
407 | | * each reference indicated. If the function ever returns a nonzero |
408 | | * value, stop the iteration and return that value. Please note that |
409 | | * it is not safe to modify references while an iteration is in |
410 | | * progress, unless the same callback function invocation that |
411 | | * modifies the reference also returns a nonzero value to immediately |
412 | | * stop the iteration. Returned references are sorted. |
413 | | */ |
414 | | int refs_head_ref(struct ref_store *refs, |
415 | | each_ref_fn fn, void *cb_data); |
416 | | int refs_for_each_ref(struct ref_store *refs, |
417 | | each_ref_fn fn, void *cb_data); |
418 | | int refs_for_each_ref_in(struct ref_store *refs, const char *prefix, |
419 | | each_ref_fn fn, void *cb_data); |
420 | | int refs_for_each_tag_ref(struct ref_store *refs, |
421 | | each_ref_fn fn, void *cb_data); |
422 | | int refs_for_each_branch_ref(struct ref_store *refs, |
423 | | each_ref_fn fn, void *cb_data); |
424 | | int refs_for_each_remote_ref(struct ref_store *refs, |
425 | | each_ref_fn fn, void *cb_data); |
426 | | int refs_for_each_replace_ref(struct ref_store *refs, |
427 | | each_ref_fn fn, void *cb_data); |
428 | | |
429 | | /* |
430 | | * references matching any pattern in "exclude_patterns" are omitted from the |
431 | | * result set on a best-effort basis. |
432 | | */ |
433 | | int refs_for_each_fullref_in(struct ref_store *refs, const char *prefix, |
434 | | const char **exclude_patterns, |
435 | | each_ref_fn fn, void *cb_data); |
436 | | |
437 | | /** |
438 | | * iterate all refs in "patterns" by partitioning patterns into disjoint sets |
439 | | * and iterating the longest-common prefix of each set. |
440 | | * |
441 | | * references matching any pattern in "exclude_patterns" are omitted from the |
442 | | * result set on a best-effort basis. |
443 | | * |
444 | | * callers should be prepared to ignore references that they did not ask for. |
445 | | */ |
446 | | int refs_for_each_fullref_in_prefixes(struct ref_store *refs, |
447 | | const char *namespace, |
448 | | const char **patterns, |
449 | | const char **exclude_patterns, |
450 | | each_ref_fn fn, void *cb_data); |
451 | | |
452 | | /* iterates all refs that match the specified glob pattern. */ |
453 | | int refs_for_each_glob_ref(struct ref_store *refs, each_ref_fn fn, |
454 | | const char *pattern, void *cb_data); |
455 | | |
456 | | int refs_for_each_glob_ref_in(struct ref_store *refs, each_ref_fn fn, |
457 | | const char *pattern, const char *prefix, void *cb_data); |
458 | | |
459 | | int refs_head_ref_namespaced(struct ref_store *refs, each_ref_fn fn, void *cb_data); |
460 | | |
461 | | /* |
462 | | * references matching any pattern in "exclude_patterns" are omitted from the |
463 | | * result set on a best-effort basis. |
464 | | */ |
465 | | int refs_for_each_namespaced_ref(struct ref_store *refs, |
466 | | const char **exclude_patterns, |
467 | | each_ref_fn fn, void *cb_data); |
468 | | |
469 | | /* can be used to learn about broken ref and symref */ |
470 | | int refs_for_each_rawref(struct ref_store *refs, each_ref_fn fn, void *cb_data); |
471 | | int refs_for_each_rawref_in(struct ref_store *refs, const char *prefix, |
472 | | each_ref_fn fn, void *cb_data); |
473 | | |
474 | | /* |
475 | | * Iterates over all refs including root refs, i.e. pseudorefs and HEAD. |
476 | | */ |
477 | | int refs_for_each_include_root_refs(struct ref_store *refs, each_ref_fn fn, |
478 | | void *cb_data); |
479 | | |
480 | | /* |
481 | | * Normalizes partial refs to their fully qualified form. |
482 | | * Will prepend <prefix> to the <pattern> if it doesn't start with 'refs/'. |
483 | | * <prefix> will default to 'refs/' if NULL. |
484 | | * |
485 | | * item.string will be set to the result. |
486 | | * item.util will be set to NULL if <pattern> contains glob characters, or |
487 | | * non-NULL if it doesn't. |
488 | | */ |
489 | | void normalize_glob_ref(struct string_list_item *item, const char *prefix, |
490 | | const char *pattern); |
491 | | |
492 | | static inline const char *has_glob_specials(const char *pattern) |
493 | 0 | { |
494 | 0 | return strpbrk(pattern, "?*["); |
495 | 0 | } Unexecuted instantiation: config.c:has_glob_specials Unexecuted instantiation: dir.c:has_glob_specials Unexecuted instantiation: environment.c:has_glob_specials Unexecuted instantiation: mailmap.c:has_glob_specials Unexecuted instantiation: object-file.c:has_glob_specials Unexecuted instantiation: object-name.c:has_glob_specials Unexecuted instantiation: odb.c:has_glob_specials Unexecuted instantiation: path.c:has_glob_specials Unexecuted instantiation: pathspec.c:has_glob_specials Unexecuted instantiation: read-cache.c:has_glob_specials Unexecuted instantiation: reflog-walk.c:has_glob_specials Unexecuted instantiation: refs.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: remote.c:has_glob_specials Unexecuted instantiation: replace-object.c:has_glob_specials Unexecuted instantiation: repo-settings.c:has_glob_specials Unexecuted instantiation: repository.c:has_glob_specials Unexecuted instantiation: revision.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.c:has_glob_specials Unexecuted instantiation: worktree.c:has_glob_specials Unexecuted instantiation: wt-status.c:has_glob_specials Unexecuted instantiation: attr.c:has_glob_specials Unexecuted instantiation: bisect.c:has_glob_specials Unexecuted instantiation: branch.c:has_glob_specials Unexecuted instantiation: bundle-uri.c:has_glob_specials Unexecuted instantiation: bundle.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: diff-lib.c:has_glob_specials Unexecuted instantiation: diff.c:has_glob_specials Unexecuted instantiation: fetch-pack.c:has_glob_specials Unexecuted instantiation: fsck.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: merge-ort.c:has_glob_specials Unexecuted instantiation: notes-cache.c:has_glob_specials Unexecuted instantiation: notes.c:has_glob_specials Unexecuted instantiation: parse-options-cb.c:has_glob_specials Unexecuted instantiation: refspec.c:has_glob_specials Unexecuted instantiation: sequencer.c:has_glob_specials Unexecuted instantiation: transport-helper.c:has_glob_specials Unexecuted instantiation: unpack-trees.c:has_glob_specials Unexecuted instantiation: apply.c:has_glob_specials Unexecuted instantiation: default.c:has_glob_specials Unexecuted instantiation: skipping.c:has_glob_specials Unexecuted instantiation: notes-utils.c:has_glob_specials Unexecuted instantiation: reset.c:has_glob_specials |
496 | | |
497 | | void refs_warn_dangling_symrefs(struct ref_store *refs, FILE *fp, |
498 | | const char *indent, int dry_run, |
499 | | const struct string_list *refnames); |
500 | | |
501 | | /* |
502 | | * Flags for controlling behaviour of refs_optimize() |
503 | | * REFS_OPTIMIZE_PRUNE: Prune loose refs after packing |
504 | | * REFS_OPTIMIZE_AUTO: Pack refs on a best effort basis. The heuristics and end |
505 | | * result are decided by the ref backend. Backends may ignore |
506 | | * this flag and fall back to a normal repack. |
507 | | */ |
508 | 0 | #define REFS_OPTIMIZE_PRUNE (1 << 0) |
509 | 0 | #define REFS_OPTIMIZE_AUTO (1 << 1) |
510 | | |
511 | | struct refs_optimize_opts { |
512 | | unsigned int flags; |
513 | | struct ref_exclusions *exclusions; |
514 | | struct string_list *includes; |
515 | | }; |
516 | | |
517 | | /* |
518 | | * Optimize the ref store. The exact behavior is up to the backend. |
519 | | * For the files backend, this is equivalent to packing refs. |
520 | | */ |
521 | | int refs_optimize(struct ref_store *refs, struct refs_optimize_opts *opts); |
522 | | |
523 | | /* |
524 | | * Check if refs backend can be optimized by calling 'refs_optimize'. |
525 | | */ |
526 | | int refs_optimize_required(struct ref_store *ref_store, |
527 | | struct refs_optimize_opts *opts, |
528 | | bool *required); |
529 | | |
530 | | /* |
531 | | * Setup reflog before using. Fill in err and return -1 on failure. |
532 | | */ |
533 | | int refs_create_reflog(struct ref_store *refs, const char *refname, |
534 | | struct strbuf *err); |
535 | | |
536 | | /** |
537 | | * Reads log for the value of ref during at_time (in which case "cnt" should be |
538 | | * negative) or the reflog "cnt" entries from the top (in which case "at_time" |
539 | | * should be 0). |
540 | | * |
541 | | * If we found the reflog entry in question, returns 0 (and details of the |
542 | | * entry can be found in the out-parameters). |
543 | | * |
544 | | * If we ran out of reflog entries, the out-parameters are filled with the |
545 | | * details of the oldest entry we did find, and the function returns 1. Note |
546 | | * that there is one important special case here! If the reflog was empty |
547 | | * and the caller asked for the 0-th cnt, we will return "1" but leave the |
548 | | * "oid" field untouched. |
549 | | **/ |
550 | | int read_ref_at(struct ref_store *refs, |
551 | | const char *refname, unsigned int flags, |
552 | | timestamp_t at_time, int cnt, |
553 | | struct object_id *oid, char **msg, |
554 | | timestamp_t *cutoff_time, int *cutoff_tz, int *cutoff_cnt); |
555 | | |
556 | | /** Check if a particular reflog exists */ |
557 | | int refs_reflog_exists(struct ref_store *refs, const char *refname); |
558 | | |
559 | | /* |
560 | | * Delete the specified reference. If old_oid is non-NULL, then |
561 | | * verify that the current value of the reference is old_oid before |
562 | | * deleting it. If old_oid is NULL, delete the reference if it |
563 | | * exists, regardless of its old value. It is an error for old_oid to |
564 | | * be null_oid. msg and flags are passed through to |
565 | | * ref_transaction_delete(). |
566 | | */ |
567 | | int refs_delete_ref(struct ref_store *refs, const char *msg, |
568 | | const char *refname, |
569 | | const struct object_id *old_oid, |
570 | | unsigned int flags); |
571 | | |
572 | | /* |
573 | | * Delete the specified references. If there are any problems, emit |
574 | | * errors but attempt to keep going (i.e., the deletes are not done in |
575 | | * an all-or-nothing transaction). msg and flags are passed through to |
576 | | * ref_transaction_delete(). |
577 | | */ |
578 | | int refs_delete_refs(struct ref_store *refs, const char *msg, |
579 | | struct string_list *refnames, unsigned int flags); |
580 | | |
581 | | /** Delete a reflog */ |
582 | | int refs_delete_reflog(struct ref_store *refs, const char *refname); |
583 | | |
584 | | /* |
585 | | * Callback to process a reflog entry found by the iteration functions (see |
586 | | * below). |
587 | | * |
588 | | * The committer parameter is a single string, in the form |
589 | | * "$GIT_COMMITTER_NAME <$GIT_COMMITTER_EMAIL>" (without double quotes). |
590 | | * |
591 | | * The timestamp parameter gives the time when entry was created as the number |
592 | | * of seconds since the UNIX epoch. |
593 | | * |
594 | | * The tz parameter gives the timezone offset for the user who created |
595 | | * the reflog entry, and its value gives a positive or negative offset |
596 | | * from UTC. Its absolute value is formed by multiplying the hour |
597 | | * part by 100 and adding the minute part. For example, 1 hour ahead |
598 | | * of UTC, CET == "+0100", is represented as positive one hundred (not |
599 | | * positive sixty). |
600 | | * |
601 | | * The msg parameter is a single complete line; a reflog message given |
602 | | * to refs_delete_ref, refs_update_ref, etc. is returned to the |
603 | | * callback normalized---each run of whitespaces are squashed into a |
604 | | * single whitespace, trailing whitespace, if exists, is trimmed, and |
605 | | * then a single LF is added at the end. |
606 | | * |
607 | | * The cb_data is a caller-supplied pointer given to the iterator |
608 | | * functions. |
609 | | */ |
610 | | typedef int each_reflog_ent_fn(const char *refname, |
611 | | struct object_id *old_oid, |
612 | | struct object_id *new_oid, |
613 | | const char *committer, |
614 | | timestamp_t timestamp, |
615 | | int tz, const char *msg, |
616 | | void *cb_data); |
617 | | |
618 | | /* Iterate over reflog entries in the log for `refname`. */ |
619 | | |
620 | | /* oldest entry first */ |
621 | | int refs_for_each_reflog_ent(struct ref_store *refs, const char *refname, |
622 | | each_reflog_ent_fn fn, void *cb_data); |
623 | | |
624 | | /* youngest entry first */ |
625 | | int refs_for_each_reflog_ent_reverse(struct ref_store *refs, |
626 | | const char *refname, |
627 | | each_reflog_ent_fn fn, |
628 | | void *cb_data); |
629 | | |
630 | | /* |
631 | | * The signature for the callback function for the refs_for_each_reflog() |
632 | | * functions below. The memory pointed to by the refname argument is only |
633 | | * guaranteed to be valid for the duration of a single callback invocation. |
634 | | */ |
635 | | typedef int each_reflog_fn(const char *refname, void *cb_data); |
636 | | |
637 | | /* |
638 | | * Calls the specified function for each reflog file until it returns nonzero, |
639 | | * and returns the value. Reflog file order is unspecified. |
640 | | */ |
641 | | int refs_for_each_reflog(struct ref_store *refs, each_reflog_fn fn, void *cb_data); |
642 | | |
643 | 0 | #define REFNAME_ALLOW_ONELEVEL 1 |
644 | 0 | #define REFNAME_REFSPEC_PATTERN 2 |
645 | | |
646 | | /* |
647 | | * Return 0 iff refname has the correct format for a refname according |
648 | | * to the rules described in Documentation/git-check-ref-format.adoc. |
649 | | * If REFNAME_ALLOW_ONELEVEL is set in flags, then accept one-level |
650 | | * reference names. If REFNAME_REFSPEC_PATTERN is set in flags, then |
651 | | * allow a single "*" wildcard character in the refspec. No leading or |
652 | | * repeated slashes are accepted. |
653 | | */ |
654 | | int check_refname_format(const char *refname, int flags); |
655 | | |
656 | | /* |
657 | | * Check the reference database for consistency. Return 0 if refs and |
658 | | * reflogs are consistent, and non-zero otherwise. The errors will be |
659 | | * written to stderr. |
660 | | */ |
661 | | int refs_fsck(struct ref_store *refs, struct fsck_options *o, |
662 | | struct worktree *wt); |
663 | | |
664 | | /* |
665 | | * Apply the rules from check_refname_format, but mutate the result until it |
666 | | * is acceptable, and place the result in "out". |
667 | | */ |
668 | | void sanitize_refname_component(const char *refname, struct strbuf *out); |
669 | | |
670 | | const char *prettify_refname(const char *refname); |
671 | | |
672 | | char *refs_shorten_unambiguous_ref(struct ref_store *refs, |
673 | | const char *refname, int strict); |
674 | | |
675 | | /** rename ref, return 0 on success **/ |
676 | | int refs_rename_ref(struct ref_store *refs, const char *oldref, |
677 | | const char *newref, const char *logmsg); |
678 | | |
679 | | /** copy ref, return 0 on success **/ |
680 | | int refs_copy_existing_ref(struct ref_store *refs, const char *oldref, |
681 | | const char *newref, const char *logmsg); |
682 | | |
683 | | int refs_update_symref(struct ref_store *refs, const char *refname, |
684 | | const char *target, const char *logmsg); |
685 | | |
686 | | int refs_update_symref_extended(struct ref_store *refs, const char *refname, |
687 | | const char *target, const char *logmsg, |
688 | | struct strbuf *referent, int create_only); |
689 | | |
690 | | enum action_on_err { |
691 | | UPDATE_REFS_MSG_ON_ERR, |
692 | | UPDATE_REFS_DIE_ON_ERR, |
693 | | UPDATE_REFS_QUIET_ON_ERR |
694 | | }; |
695 | | |
696 | | enum ref_transaction_flag { |
697 | | /* |
698 | | * The ref transaction is part of the initial creation of the ref store |
699 | | * and can thus assume that the ref store is completely empty. This |
700 | | * allows the backend to perform the transaction more efficiently by |
701 | | * skipping certain checks. |
702 | | * |
703 | | * It is a bug to set this flag when there might be other processes |
704 | | * accessing the repository or if there are existing references that |
705 | | * might conflict with the ones being created. All old_oid values must |
706 | | * either be absent or null_oid. |
707 | | */ |
708 | | REF_TRANSACTION_FLAG_INITIAL = (1 << 0), |
709 | | |
710 | | /* |
711 | | * The transaction mechanism by default fails all updates if any conflict |
712 | | * is detected. This flag allows transactions to partially apply updates |
713 | | * while rejecting updates which do not match the expected state. |
714 | | */ |
715 | | REF_TRANSACTION_ALLOW_FAILURE = (1 << 1), |
716 | | }; |
717 | | |
718 | | /* |
719 | | * Begin a reference transaction. The reference transaction must |
720 | | * be freed by calling ref_transaction_free(). |
721 | | */ |
722 | | struct ref_transaction *ref_store_transaction_begin(struct ref_store *refs, |
723 | | unsigned int flags, |
724 | | struct strbuf *err); |
725 | | |
726 | | /* |
727 | | * Reference transaction updates |
728 | | * |
729 | | * The following four functions add a reference check or update to a |
730 | | * ref_transaction. They have some common similar parameters: |
731 | | * |
732 | | * transaction -- a pointer to an open ref_transaction, obtained |
733 | | * from ref_transaction_begin(). |
734 | | * |
735 | | * refname -- the name of the reference to be affected. |
736 | | * |
737 | | * new_oid -- the object ID that should be set to be the new value |
738 | | * of the reference. Some functions allow this parameter to be |
739 | | * NULL, meaning that the reference is not changed, or |
740 | | * null_oid, meaning that the reference should be deleted. A |
741 | | * copy of this value is made in the transaction. |
742 | | * |
743 | | * old_oid -- the object ID that the reference must have before |
744 | | * the update. Some functions allow this parameter to be NULL, |
745 | | * meaning that the old value of the reference is not checked, |
746 | | * or null_oid, meaning that the reference must not exist |
747 | | * before the update. A copy of this value is made in the |
748 | | * transaction. |
749 | | * |
750 | | * new_target -- the target reference that the reference will be |
751 | | * updated to point to. If the reference is a regular reference, |
752 | | * it will be converted to a symbolic reference. Cannot be set |
753 | | * together with `new_oid`. A copy of this value is made in the |
754 | | * transaction. |
755 | | * |
756 | | * old_target -- the reference that the reference must be pointing to. |
757 | | * Canont be set together with `old_oid`. A copy of this value is |
758 | | * made in the transaction. |
759 | | * |
760 | | * flags -- flags affecting the update, passed to |
761 | | * update_ref_lock(). Possible flags: REF_NO_DEREF, |
762 | | * REF_FORCE_CREATE_REFLOG. See those constants for more |
763 | | * information. |
764 | | * |
765 | | * msg -- a message describing the change (for the reflog). |
766 | | * |
767 | | * err -- a strbuf for receiving a description of any error that |
768 | | * might have occurred. |
769 | | * |
770 | | * The functions make internal copies of refname and msg, so the |
771 | | * caller retains ownership of these parameters. |
772 | | * |
773 | | * The functions return 0 on success and non-zero on failure. A |
774 | | * failure means that the transaction as a whole has failed and needs |
775 | | * to be rolled back. |
776 | | */ |
777 | | |
778 | | /* |
779 | | * The following flags can be passed to ref_transaction_update() etc. |
780 | | * Internally, they are stored in `ref_update::flags`, along with some |
781 | | * internal flags. |
782 | | */ |
783 | | |
784 | | /* |
785 | | * Act on the ref directly; i.e., without dereferencing symbolic refs. |
786 | | * If this flag is not specified, then symbolic references are |
787 | | * dereferenced and the update is applied to the referent. |
788 | | */ |
789 | 0 | #define REF_NO_DEREF (1 << 0) |
790 | | |
791 | | /* |
792 | | * Force the creation of a reflog for this reference, even if it |
793 | | * didn't previously have a reflog. |
794 | | */ |
795 | 0 | #define REF_FORCE_CREATE_REFLOG (1 << 1) |
796 | | |
797 | | /* |
798 | | * Blindly write an object_id. This is useful for testing data corruption |
799 | | * scenarios. |
800 | | */ |
801 | 0 | #define REF_SKIP_OID_VERIFICATION (1 << 10) |
802 | | |
803 | | /* |
804 | | * Skip verifying refname. This is useful for testing data corruption scenarios. |
805 | | */ |
806 | 0 | #define REF_SKIP_REFNAME_VERIFICATION (1 << 11) |
807 | | |
808 | | /* |
809 | | * Skip creation of a reflog entry, even if it would have otherwise been |
810 | | * created. |
811 | | */ |
812 | 0 | #define REF_SKIP_CREATE_REFLOG (1 << 12) |
813 | | |
814 | | /* |
815 | | * When writing a REF_LOG_ONLY record, use the old and new object IDs provided |
816 | | * in the update instead of resolving the old object ID. The caller must also |
817 | | * set both REF_HAVE_OLD and REF_HAVE_NEW. |
818 | | */ |
819 | 0 | #define REF_LOG_USE_PROVIDED_OIDS (1 << 13) |
820 | | |
821 | | /* |
822 | | * Bitmask of all of the flags that are allowed to be passed in to |
823 | | * ref_transaction_update() and friends: |
824 | | */ |
825 | | #define REF_TRANSACTION_UPDATE_ALLOWED_FLAGS \ |
826 | 0 | (REF_NO_DEREF | REF_FORCE_CREATE_REFLOG | REF_SKIP_OID_VERIFICATION | \ |
827 | 0 | REF_SKIP_REFNAME_VERIFICATION | REF_SKIP_CREATE_REFLOG | REF_LOG_USE_PROVIDED_OIDS) |
828 | | |
829 | | /* |
830 | | * Add a reference update to transaction. `new_oid` is the value that |
831 | | * the reference should have after the update, or `null_oid` if it |
832 | | * should be deleted. If `new_oid` is NULL, then the reference is not |
833 | | * changed at all. `old_oid` is the value that the reference must have |
834 | | * before the update, or `null_oid` if it must not have existed |
835 | | * beforehand. The old value is checked after the lock is taken to |
836 | | * prevent races. If the old value doesn't agree with old_oid, the |
837 | | * whole transaction fails. If old_oid is NULL, then the previous |
838 | | * value is not checked. If `old_target` is not NULL, treat the reference |
839 | | * as a symbolic ref and validate that its target before the update is |
840 | | * `old_target`. If the `new_target` is not NULL, then the reference |
841 | | * will be updated to a symbolic ref which targets `new_target`. |
842 | | * Together, these allow us to update between regular refs and symrefs. |
843 | | * |
844 | | * See the above comment "Reference transaction updates" for more |
845 | | * information. |
846 | | */ |
847 | | int ref_transaction_update(struct ref_transaction *transaction, |
848 | | const char *refname, |
849 | | const struct object_id *new_oid, |
850 | | const struct object_id *old_oid, |
851 | | const char *new_target, |
852 | | const char *old_target, |
853 | | unsigned int flags, const char *msg, |
854 | | struct strbuf *err); |
855 | | |
856 | | /* |
857 | | * Similar to `ref_transaction_update`, but this function is only for adding |
858 | | * a reflog update. Supports providing custom committer information. The index |
859 | | * field can be utiltized to order updates as desired. When set to zero, the |
860 | | * updates default to being ordered by refname. |
861 | | */ |
862 | | int ref_transaction_update_reflog(struct ref_transaction *transaction, |
863 | | const char *refname, |
864 | | const struct object_id *new_oid, |
865 | | const struct object_id *old_oid, |
866 | | const char *committer_info, |
867 | | const char *msg, |
868 | | uint64_t index, |
869 | | struct strbuf *err); |
870 | | |
871 | | /* |
872 | | * Add a reference creation to transaction. new_oid is the value that |
873 | | * the reference should have after the update; it must not be |
874 | | * null_oid. It is verified that the reference does not exist |
875 | | * already. |
876 | | * |
877 | | * See the above comment "Reference transaction updates" for more |
878 | | * information. |
879 | | */ |
880 | | int ref_transaction_create(struct ref_transaction *transaction, |
881 | | const char *refname, |
882 | | const struct object_id *new_oid, |
883 | | const char *new_target, |
884 | | unsigned int flags, const char *msg, |
885 | | struct strbuf *err); |
886 | | |
887 | | /* |
888 | | * Add a reference deletion to transaction. If old_oid is non-NULL, |
889 | | * then it holds the value that the reference should have had before |
890 | | * the update (which must not be null_oid). |
891 | | * |
892 | | * See the above comment "Reference transaction updates" for more |
893 | | * information. |
894 | | */ |
895 | | int ref_transaction_delete(struct ref_transaction *transaction, |
896 | | const char *refname, |
897 | | const struct object_id *old_oid, |
898 | | const char *old_target, |
899 | | unsigned int flags, |
900 | | const char *msg, |
901 | | struct strbuf *err); |
902 | | |
903 | | /* |
904 | | * Verify, within a transaction, that refname has the value old_oid, |
905 | | * or, if old_oid is null_oid, then verify that the reference |
906 | | * doesn't exist. old_oid must be non-NULL. |
907 | | * |
908 | | * See the above comment "Reference transaction updates" for more |
909 | | * information. |
910 | | */ |
911 | | int ref_transaction_verify(struct ref_transaction *transaction, |
912 | | const char *refname, |
913 | | const struct object_id *old_oid, |
914 | | const char *old_target, |
915 | | unsigned int flags, |
916 | | struct strbuf *err); |
917 | | |
918 | | /* |
919 | | * Perform the preparatory stages of committing `transaction`. Acquire |
920 | | * any needed locks, check preconditions, etc.; basically, do as much |
921 | | * as possible to ensure that the transaction will be able to go |
922 | | * through, stopping just short of making any irrevocable or |
923 | | * user-visible changes. The updates that this function prepares can |
924 | | * be finished up by calling `ref_transaction_commit()` or rolled back |
925 | | * by calling `ref_transaction_abort()`. |
926 | | * |
927 | | * On success, return 0 and leave the transaction in "prepared" state. |
928 | | * On failure, abort the transaction, write an error message to `err`, |
929 | | * and return one of the `TRANSACTION_*` constants. |
930 | | * |
931 | | * Callers who don't need such fine-grained control over committing |
932 | | * reference transactions should just call `ref_transaction_commit()`. |
933 | | */ |
934 | | int ref_transaction_prepare(struct ref_transaction *transaction, |
935 | | struct strbuf *err); |
936 | | |
937 | | /* |
938 | | * Commit all of the changes that have been queued in transaction, as |
939 | | * atomically as possible. On success, return 0 and leave the |
940 | | * transaction in "closed" state. On failure, roll back the |
941 | | * transaction, write an error message to `err`, and return one of the |
942 | | * `TRANSACTION_*` constants |
943 | | */ |
944 | | int ref_transaction_commit(struct ref_transaction *transaction, |
945 | | struct strbuf *err); |
946 | | |
947 | | /* |
948 | | * Abort `transaction`, which has been begun and possibly prepared, |
949 | | * but not yet committed. |
950 | | */ |
951 | | int ref_transaction_abort(struct ref_transaction *transaction, |
952 | | struct strbuf *err); |
953 | | |
954 | | /* |
955 | | * Execute the given callback function for each of the reference updates which |
956 | | * have been queued in the given transaction. `old_oid` and `new_oid` may be |
957 | | * `NULL` pointers depending on whether the update has these object IDs set or |
958 | | * not. |
959 | | */ |
960 | | typedef void ref_transaction_for_each_queued_update_fn(const char *refname, |
961 | | const struct object_id *old_oid, |
962 | | const struct object_id *new_oid, |
963 | | void *cb_data); |
964 | | void ref_transaction_for_each_queued_update(struct ref_transaction *transaction, |
965 | | ref_transaction_for_each_queued_update_fn cb, |
966 | | void *cb_data); |
967 | | |
968 | | /* |
969 | | * Execute the given callback function for each of the reference updates which |
970 | | * have been rejected in the given transaction. |
971 | | */ |
972 | | typedef void ref_transaction_for_each_rejected_update_fn(const char *refname, |
973 | | const struct object_id *old_oid, |
974 | | const struct object_id *new_oid, |
975 | | const char *old_target, |
976 | | const char *new_target, |
977 | | enum ref_transaction_error err, |
978 | | void *cb_data); |
979 | | void ref_transaction_for_each_rejected_update(struct ref_transaction *transaction, |
980 | | ref_transaction_for_each_rejected_update_fn cb, |
981 | | void *cb_data); |
982 | | |
983 | | /* |
984 | | * Translate errors to human readable error messages. |
985 | | */ |
986 | | const char *ref_transaction_error_msg(enum ref_transaction_error err); |
987 | | |
988 | | /* |
989 | | * Free `*transaction` and all associated data. |
990 | | */ |
991 | | void ref_transaction_free(struct ref_transaction *transaction); |
992 | | |
993 | | /** |
994 | | * Lock, update, and unlock a single reference. This function |
995 | | * basically does a transaction containing a single call to |
996 | | * ref_transaction_update(). The parameters to this function have the |
997 | | * same meaning as the corresponding parameters to |
998 | | * ref_transaction_update(). Handle errors as requested by the `onerr` |
999 | | * argument. |
1000 | | */ |
1001 | | int refs_update_ref(struct ref_store *refs, const char *msg, const char *refname, |
1002 | | const struct object_id *new_oid, const struct object_id *old_oid, |
1003 | | unsigned int flags, enum action_on_err onerr); |
1004 | | |
1005 | | int parse_hide_refs_config(const char *var, const char *value, const char *, |
1006 | | struct strvec *); |
1007 | | |
1008 | | /* |
1009 | | * Check whether a ref is hidden. If no namespace is set, both the first and |
1010 | | * the second parameter point to the full ref name. If a namespace is set and |
1011 | | * the ref is inside that namespace, the first parameter is a pointer to the |
1012 | | * name of the ref with the namespace prefix removed. If a namespace is set and |
1013 | | * the ref is outside that namespace, the first parameter is NULL. The second |
1014 | | * parameter always points to the full ref name. |
1015 | | */ |
1016 | | int ref_is_hidden(const char *, const char *, const struct strvec *); |
1017 | | |
1018 | | /* |
1019 | | * Returns an array of patterns to use as excluded_patterns, if none of the |
1020 | | * hidden references use the token '!' or '^'. |
1021 | | */ |
1022 | | const char **hidden_refs_to_excludes(const struct strvec *hide_refs); |
1023 | | |
1024 | | /* |
1025 | | * Prefix all exclude patterns with the namespace, if any. This is required |
1026 | | * because exclude patterns apply to the stripped reference name, not the full |
1027 | | * reference name with the namespace. |
1028 | | */ |
1029 | | const char **get_namespaced_exclude_patterns(const char **exclude_patterns, |
1030 | | const char *namespace, |
1031 | | struct strvec *out); |
1032 | | |
1033 | | /* Is this a per-worktree ref living in the refs/ namespace? */ |
1034 | | int is_per_worktree_ref(const char *refname); |
1035 | | |
1036 | | /* Describes how a refname relates to worktrees */ |
1037 | | enum ref_worktree_type { |
1038 | | REF_WORKTREE_CURRENT, /* implicitly per worktree, eg. HEAD or |
1039 | | refs/bisect/SOMETHING */ |
1040 | | REF_WORKTREE_MAIN, /* explicitly in main worktree, eg. |
1041 | | main-worktree/HEAD */ |
1042 | | REF_WORKTREE_OTHER, /* explicitly in named worktree, eg. |
1043 | | worktrees/bla/HEAD */ |
1044 | | REF_WORKTREE_SHARED, /* the default, eg. refs/heads/main */ |
1045 | | }; |
1046 | | |
1047 | | /* |
1048 | | * Parse a `maybe_worktree_ref` as a ref that possibly refers to a worktree ref |
1049 | | * (ie. either REFNAME, main-worktree/REFNAME or worktree/WORKTREE/REFNAME). It |
1050 | | * returns what kind of ref was found, and in case of REF_WORKTREE_OTHER, the |
1051 | | * worktree name is returned in `worktree_name` (pointing into |
1052 | | * `maybe_worktree_ref`) and `worktree_name_length`. The bare refname (the |
1053 | | * refname stripped of prefixes) is returned in `bare_refname`. The |
1054 | | * `worktree_name`, `worktree_name_length` and `bare_refname` arguments may be |
1055 | | * NULL. |
1056 | | */ |
1057 | | enum ref_worktree_type parse_worktree_ref(const char *maybe_worktree_ref, |
1058 | | const char **worktree_name, |
1059 | | int *worktree_name_length, |
1060 | | const char **bare_refname); |
1061 | | |
1062 | | enum expire_reflog_flags { |
1063 | | EXPIRE_REFLOGS_DRY_RUN = 1 << 0, |
1064 | | EXPIRE_REFLOGS_UPDATE_REF = 1 << 1, |
1065 | | EXPIRE_REFLOGS_REWRITE = 1 << 2, |
1066 | | }; |
1067 | | |
1068 | | /* |
1069 | | * The following interface is used for reflog expiration. The caller |
1070 | | * calls refs_reflog_expire(), supplying it with three callback functions, |
1071 | | * of the following types. The callback functions define the |
1072 | | * expiration policy that is desired. |
1073 | | * |
1074 | | * reflog_expiry_prepare_fn -- Called once after the reference is |
1075 | | * locked. Called with the OID of the locked reference. |
1076 | | * |
1077 | | * reflog_expiry_should_prune_fn -- Called once for each entry in the |
1078 | | * existing reflog. It should return true iff that entry should be |
1079 | | * pruned. |
1080 | | * |
1081 | | * reflog_expiry_cleanup_fn -- Called once before the reference is |
1082 | | * unlocked again. |
1083 | | */ |
1084 | | typedef void reflog_expiry_prepare_fn(const char *refname, |
1085 | | const struct object_id *oid, |
1086 | | void *cb_data); |
1087 | | typedef int reflog_expiry_should_prune_fn(struct object_id *ooid, |
1088 | | struct object_id *noid, |
1089 | | const char *email, |
1090 | | timestamp_t timestamp, int tz, |
1091 | | const char *message, void *cb_data); |
1092 | | typedef void reflog_expiry_cleanup_fn(void *cb_data); |
1093 | | |
1094 | | /* |
1095 | | * Expire reflog entries for the specified reference. |
1096 | | * flags is a combination of the constants in |
1097 | | * enum expire_reflog_flags. The three function pointers are described |
1098 | | * above. On success, return zero. |
1099 | | */ |
1100 | | int refs_reflog_expire(struct ref_store *refs, |
1101 | | const char *refname, |
1102 | | unsigned int flags, |
1103 | | reflog_expiry_prepare_fn prepare_fn, |
1104 | | reflog_expiry_should_prune_fn should_prune_fn, |
1105 | | reflog_expiry_cleanup_fn cleanup_fn, |
1106 | | void *policy_cb_data); |
1107 | | |
1108 | | struct ref_store *get_main_ref_store(struct repository *r); |
1109 | | |
1110 | | /** |
1111 | | * Submodules |
1112 | | * ---------- |
1113 | | * |
1114 | | * If you want to iterate the refs of a submodule you first need to add the |
1115 | | * submodules object database. You can do this by a code-snippet like |
1116 | | * this: |
1117 | | * |
1118 | | * const char *path = "path/to/submodule" |
1119 | | * if (add_submodule_odb(path)) |
1120 | | * die("Error submodule '%s' not populated.", path); |
1121 | | * |
1122 | | * `add_submodule_odb()` will return zero on success. If you |
1123 | | * do not do this you will get an error for each ref that it does not point |
1124 | | * to a valid object. |
1125 | | * |
1126 | | * Note: As a side-effect of this you cannot safely assume that all |
1127 | | * objects you lookup are available in superproject. All submodule objects |
1128 | | * will be available the same way as the superprojects objects. |
1129 | | * |
1130 | | * Example: |
1131 | | * -------- |
1132 | | * |
1133 | | * ---- |
1134 | | * static int handle_remote_ref(const char *refname, |
1135 | | * const unsigned char *sha1, int flags, void *cb_data) |
1136 | | * { |
1137 | | * struct strbuf *output = cb_data; |
1138 | | * strbuf_addf(output, "%s\n", refname); |
1139 | | * return 0; |
1140 | | * } |
1141 | | * |
1142 | | */ |
1143 | | |
1144 | | /* |
1145 | | * Return the ref_store instance for the specified submodule. For the |
1146 | | * main repository, use submodule==NULL; such a call cannot fail. For |
1147 | | * a submodule, the submodule must exist and be a nonbare repository, |
1148 | | * otherwise return NULL. If the requested reference store has not yet |
1149 | | * been initialized, initialize it first. |
1150 | | * |
1151 | | * For backwards compatibility, submodule=="" is treated the same as |
1152 | | * submodule==NULL. |
1153 | | */ |
1154 | | struct ref_store *repo_get_submodule_ref_store(struct repository *repo, |
1155 | | const char *submodule); |
1156 | | struct ref_store *get_worktree_ref_store(const struct worktree *wt); |
1157 | | |
1158 | | /* |
1159 | | * Some of the names specified by refs have special meaning to Git. |
1160 | | * Organize these namespaces in a common 'ref_namespace' array for |
1161 | | * reference from multiple places in the codebase. |
1162 | | */ |
1163 | | |
1164 | | struct ref_namespace_info { |
1165 | | const char *ref; |
1166 | | enum decoration_type decoration; |
1167 | | |
1168 | | /* |
1169 | | * If 'exact' is true, then we must match the 'ref' exactly. |
1170 | | * Otherwise, use a prefix match. |
1171 | | * |
1172 | | * 'ref_updated' is for internal use. It represents whether the |
1173 | | * 'ref' value was replaced from its original literal version. |
1174 | | */ |
1175 | | unsigned exact:1, |
1176 | | ref_updated:1; |
1177 | | }; |
1178 | | |
1179 | | enum ref_namespace { |
1180 | | NAMESPACE_HEAD, |
1181 | | NAMESPACE_BRANCHES, |
1182 | | NAMESPACE_TAGS, |
1183 | | NAMESPACE_REMOTE_REFS, |
1184 | | NAMESPACE_STASH, |
1185 | | NAMESPACE_REPLACE, |
1186 | | NAMESPACE_NOTES, |
1187 | | NAMESPACE_PREFETCH, |
1188 | | NAMESPACE_REWRITTEN, |
1189 | | |
1190 | | /* Must be last */ |
1191 | | NAMESPACE__COUNT |
1192 | | }; |
1193 | | |
1194 | | /* See refs.c for the contents of this array. */ |
1195 | | extern struct ref_namespace_info ref_namespace[NAMESPACE__COUNT]; |
1196 | | |
1197 | | /* |
1198 | | * Some ref namespaces can be modified by config values or environment |
1199 | | * variables. Modify a namespace as specified by its ref_namespace key. |
1200 | | */ |
1201 | | void update_ref_namespace(enum ref_namespace namespace, char *ref); |
1202 | | |
1203 | | /* |
1204 | | * Check whether the provided name names a root reference. This function only |
1205 | | * performs a syntactic check. |
1206 | | * |
1207 | | * A root ref is a reference that lives in the root of the reference hierarchy. |
1208 | | * These references must conform to special syntax: |
1209 | | * |
1210 | | * - Their name must be all-uppercase or underscores ("_"). |
1211 | | * |
1212 | | * - Their name must end with "_HEAD". As a special rule, "HEAD" is a root |
1213 | | * ref, as well. |
1214 | | * |
1215 | | * - Their name may not contain a slash. |
1216 | | * |
1217 | | * There is a special set of irregular root refs that exist due to historic |
1218 | | * reasons, only. This list shall not be expanded in the future: |
1219 | | * |
1220 | | * - AUTO_MERGE |
1221 | | * |
1222 | | * - BISECT_EXPECTED_REV |
1223 | | * |
1224 | | * - NOTES_MERGE_PARTIAL |
1225 | | * |
1226 | | * - NOTES_MERGE_REF |
1227 | | * |
1228 | | * - MERGE_AUTOSTASH |
1229 | | */ |
1230 | | int is_root_ref(const char *refname); |
1231 | | |
1232 | | /* |
1233 | | * Pseudorefs are refs that have different semantics compared to |
1234 | | * "normal" refs. These refs can thus not be stored in the ref backend, |
1235 | | * but must always be accessed via the filesystem. The following refs |
1236 | | * are pseudorefs: |
1237 | | * |
1238 | | * - FETCH_HEAD may contain multiple object IDs, and each one of them |
1239 | | * carries additional metadata like where it came from. |
1240 | | * |
1241 | | * - MERGE_HEAD may contain multiple object IDs when merging multiple |
1242 | | * heads. |
1243 | | * |
1244 | | * Reading, writing or deleting references must consistently go either |
1245 | | * through the filesystem (pseudorefs) or through the reference |
1246 | | * backend (normal ones). |
1247 | | */ |
1248 | | int is_pseudo_ref(const char *refname); |
1249 | | |
1250 | | /* |
1251 | | * The following flags can be passed to `repo_migrate_ref_storage_format()`: |
1252 | | * |
1253 | | * - REPO_MIGRATE_REF_STORAGE_FORMAT_DRYRUN: perform a dry-run migration |
1254 | | * without touching the main repository. The result will be written into a |
1255 | | * temporary ref storage directory. |
1256 | | * |
1257 | | * - REPO_MIGRATE_REF_STORAGE_FORMAT_SKIP_REFLOG: skip migration of reflogs. |
1258 | | */ |
1259 | 0 | #define REPO_MIGRATE_REF_STORAGE_FORMAT_DRYRUN (1 << 0) |
1260 | 0 | #define REPO_MIGRATE_REF_STORAGE_FORMAT_SKIP_REFLOG (1 << 1) |
1261 | | |
1262 | | /* |
1263 | | * Migrate the ref storage format used by the repository to the |
1264 | | * specified one. |
1265 | | */ |
1266 | | int repo_migrate_ref_storage_format(struct repository *repo, |
1267 | | enum ref_storage_format format, |
1268 | | unsigned int flags, |
1269 | | struct strbuf *err); |
1270 | | |
1271 | | /* |
1272 | | * Reference iterators |
1273 | | * |
1274 | | * A reference iterator encapsulates the state of an in-progress |
1275 | | * iteration over references. Create an instance of `struct |
1276 | | * ref_iterator` via one of the functions in this module. |
1277 | | * |
1278 | | * A freshly-created ref_iterator doesn't yet point at a reference. To |
1279 | | * advance the iterator, call ref_iterator_advance(). If successful, |
1280 | | * this sets the iterator's refname, oid, and flags fields to describe |
1281 | | * the next reference and returns ITER_OK. The data pointed at by |
1282 | | * refname and oid belong to the iterator; if you want to retain them |
1283 | | * after calling ref_iterator_advance() again or calling |
1284 | | * ref_iterator_free(), you must make a copy. When the iteration has |
1285 | | * been exhausted, ref_iterator_advance() releases any resources |
1286 | | * associated with the iteration, frees the ref_iterator object, and |
1287 | | * returns ITER_DONE. If you want to abort the iteration early, call |
1288 | | * ref_iterator_free(), which also frees the ref_iterator object and |
1289 | | * any associated resources. If there was an internal error advancing |
1290 | | * to the next entry, ref_iterator_advance() aborts the iteration, |
1291 | | * frees the ref_iterator, and returns ITER_ERROR. |
1292 | | * |
1293 | | * Putting it all together, a typical iteration looks like this: |
1294 | | * |
1295 | | * int ok; |
1296 | | * struct ref_iterator *iter = ...; |
1297 | | * |
1298 | | * while ((ok = ref_iterator_advance(iter)) == ITER_OK) { |
1299 | | * if (want_to_stop_iteration()) { |
1300 | | * ok = ITER_DONE; |
1301 | | * break; |
1302 | | * } |
1303 | | * |
1304 | | * // Access information about the current reference: |
1305 | | * if (!(iter->flags & REF_ISSYMREF)) |
1306 | | * printf("%s is %s\n", iter->refname, oid_to_hex(iter->oid)); |
1307 | | * } |
1308 | | * |
1309 | | * if (ok != ITER_DONE) |
1310 | | * handle_error(); |
1311 | | * ref_iterator_free(iter); |
1312 | | */ |
1313 | | struct ref_iterator; |
1314 | | |
1315 | | /* |
1316 | | * These flags are passed to refs_ref_iterator_begin() (and do_for_each_ref(), |
1317 | | * which feeds it). |
1318 | | */ |
1319 | | enum do_for_each_ref_flags { |
1320 | | /* |
1321 | | * Include broken references in a do_for_each_ref*() iteration, which |
1322 | | * would normally be omitted. This includes both refs that point to |
1323 | | * missing objects (a true repository corruption), ones with illegal |
1324 | | * names (which we prefer not to expose to callers), as well as |
1325 | | * dangling symbolic refs (i.e., those that point to a non-existent |
1326 | | * ref; this is not a corruption, but as they have no valid oid, we |
1327 | | * omit them from normal iteration results). |
1328 | | */ |
1329 | | DO_FOR_EACH_INCLUDE_BROKEN = (1 << 0), |
1330 | | |
1331 | | /* |
1332 | | * Only include per-worktree refs in a do_for_each_ref*() iteration. |
1333 | | * Normally this will be used with a files ref_store, since that's |
1334 | | * where all reference backends will presumably store their |
1335 | | * per-worktree refs. |
1336 | | */ |
1337 | | DO_FOR_EACH_PER_WORKTREE_ONLY = (1 << 1), |
1338 | | |
1339 | | /* |
1340 | | * Omit dangling symrefs from output; this only has an effect with |
1341 | | * INCLUDE_BROKEN, since they are otherwise not included at all. |
1342 | | */ |
1343 | | DO_FOR_EACH_OMIT_DANGLING_SYMREFS = (1 << 2), |
1344 | | |
1345 | | /* |
1346 | | * Include root refs i.e. HEAD and pseudorefs along with the regular |
1347 | | * refs. |
1348 | | */ |
1349 | | DO_FOR_EACH_INCLUDE_ROOT_REFS = (1 << 3), |
1350 | | }; |
1351 | | |
1352 | | /* |
1353 | | * Return an iterator that goes over each reference in `refs` for |
1354 | | * which the refname begins with prefix. If trim is non-zero, then |
1355 | | * trim that many characters off the beginning of each refname. |
1356 | | * The output is ordered by refname. |
1357 | | */ |
1358 | | struct ref_iterator *refs_ref_iterator_begin( |
1359 | | struct ref_store *refs, |
1360 | | const char *prefix, const char **exclude_patterns, |
1361 | | int trim, enum do_for_each_ref_flags flags); |
1362 | | |
1363 | | /* |
1364 | | * Advance the iterator to the first or next item and return ITER_OK. |
1365 | | * If the iteration is exhausted, free the resources associated with |
1366 | | * the ref_iterator and return ITER_DONE. On errors, free the iterator |
1367 | | * resources and return ITER_ERROR. It is a bug to use ref_iterator or |
1368 | | * call this function again after it has returned ITER_DONE or |
1369 | | * ITER_ERROR. |
1370 | | */ |
1371 | | int ref_iterator_advance(struct ref_iterator *ref_iterator); |
1372 | | |
1373 | | enum ref_iterator_seek_flag { |
1374 | | /* |
1375 | | * When the REF_ITERATOR_SEEK_SET_PREFIX flag is set, the iterator's prefix is |
1376 | | * updated to match the provided string, affecting all subsequent iterations. If |
1377 | | * not, the iterator seeks to the specified reference and clears any previously |
1378 | | * set prefix. |
1379 | | */ |
1380 | | REF_ITERATOR_SEEK_SET_PREFIX = (1 << 0), |
1381 | | }; |
1382 | | |
1383 | | /* |
1384 | | * Seek the iterator to the first reference matching the given seek string. |
1385 | | * The seek string is matched as a literal string, without regard for path |
1386 | | * separators. If seek is NULL or the empty string, seek the iterator to the |
1387 | | * first reference again. |
1388 | | * |
1389 | | * This function is expected to behave as if a new ref iterator has been |
1390 | | * created, but allows reuse of existing iterators for optimization. |
1391 | | * |
1392 | | * Returns 0 on success, a negative error code otherwise. |
1393 | | */ |
1394 | | int ref_iterator_seek(struct ref_iterator *ref_iterator, const char *refname, |
1395 | | unsigned int flags); |
1396 | | |
1397 | | /* Free the reference iterator and any associated resources. */ |
1398 | | void ref_iterator_free(struct ref_iterator *ref_iterator); |
1399 | | |
1400 | | /* |
1401 | | * The common backend for the for_each_*ref* functions. Call fn for |
1402 | | * each reference in iter. If the iterator itself ever returns |
1403 | | * ITER_ERROR, return -1. If fn ever returns a non-zero value, stop |
1404 | | * the iteration and return that value. Otherwise, return 0. In any |
1405 | | * case, free the iterator when done. This function is basically an |
1406 | | * adapter between the callback style of reference iteration and the |
1407 | | * iterator style. |
1408 | | */ |
1409 | | int do_for_each_ref_iterator(struct ref_iterator *iter, |
1410 | | each_ref_fn fn, void *cb_data); |
1411 | | |
1412 | | #endif /* REFS_H */ |