]>
Commit | Line | Data |
---|---|---|
bb742ede | 1 | /* |
359fc2d2 | 2 | * Copyright (C) the libgit2 contributors. All rights reserved. |
bb742ede VM |
3 | * |
4 | * This file is part of libgit2, distributed under the GNU GPL v2 with | |
5 | * a Linking Exception. For full terms see the included COPYING file. | |
6 | */ | |
9282e921 | 7 | #ifndef INCLUDE_refs_h__ |
8 | #define INCLUDE_refs_h__ | |
9 | ||
10 | #include "common.h" | |
11 | #include "git2/oid.h" | |
c836c332 | 12 | #include "git2/refs.h" |
d00d5464 | 13 | #include "git2/refdb.h" |
c2b67043 | 14 | #include "strmap.h" |
c030ada7 | 15 | #include "buffer.h" |
b7f167da | 16 | #include "oid.h" |
9282e921 | 17 | |
18 | #define GIT_REFS_DIR "refs/" | |
19 | #define GIT_REFS_HEADS_DIR GIT_REFS_DIR "heads/" | |
20 | #define GIT_REFS_TAGS_DIR GIT_REFS_DIR "tags/" | |
aa2120e9 | 21 | #define GIT_REFS_REMOTES_DIR GIT_REFS_DIR "remotes/" |
6f13a305 | 22 | #define GIT_REFS_NOTES_DIR GIT_REFS_DIR "notes/" |
ce8cd006 | 23 | #define GIT_REFS_DIR_MODE 0777 |
01ad7b3a | 24 | #define GIT_REFS_FILE_MODE 0666 |
9282e921 | 25 | |
0ffcf78a MS |
26 | #define GIT_RENAMED_REF_FILE GIT_REFS_DIR "RENAMED-REF" |
27 | ||
2f8a8ab2 | 28 | #define GIT_SYMREF "ref: " |
9282e921 | 29 | #define GIT_PACKEDREFS_FILE "packed-refs" |
1022db2b | 30 | #define GIT_PACKEDREFS_HEADER "# pack-refs with: peeled fully-peeled " |
9788e72a | 31 | #define GIT_PACKEDREFS_FILE_MODE 0666 |
9282e921 | 32 | |
d2d6912e | 33 | #define GIT_HEAD_FILE "HEAD" |
632d8b23 | 34 | #define GIT_ORIG_HEAD_FILE "ORIG_HEAD" |
517bda19 | 35 | #define GIT_FETCH_HEAD_FILE "FETCH_HEAD" |
df30eac1 | 36 | #define GIT_MERGE_HEAD_FILE "MERGE_HEAD" |
632d8b23 | 37 | #define GIT_REVERT_HEAD_FILE "REVERT_HEAD" |
0ba4dca5 | 38 | #define GIT_CHERRYPICK_HEAD_FILE "CHERRY_PICK_HEAD" |
31966d20 | 39 | #define GIT_BISECT_LOG_FILE "BISECT_LOG" |
40 | #define GIT_REBASE_MERGE_DIR "rebase-merge/" | |
41 | #define GIT_REBASE_MERGE_INTERACTIVE_FILE GIT_REBASE_MERGE_DIR "interactive" | |
42 | #define GIT_REBASE_APPLY_DIR "rebase-apply/" | |
43 | #define GIT_REBASE_APPLY_REBASING_FILE GIT_REBASE_APPLY_DIR "rebasing" | |
44 | #define GIT_REBASE_APPLY_APPLYING_FILE GIT_REBASE_APPLY_DIR "applying" | |
d2d6912e | 45 | #define GIT_REFS_HEADS_MASTER_FILE GIT_REFS_HEADS_DIR "master" |
46 | ||
4ea0a0ca | 47 | #define GIT_STASH_FILE "stash" |
48 | #define GIT_REFS_STASH_FILE GIT_REFS_DIR GIT_STASH_FILE | |
49 | ||
92dac975 RB |
50 | #define GIT_REF_FORMAT__PRECOMPOSE_UNICODE (1u << 16) |
51 | ||
3101a3e5 VM |
52 | #define GIT_REFNAME_MAX 1024 |
53 | ||
824f755f AS |
54 | typedef char git_refname_t[GIT_REFNAME_MAX]; |
55 | ||
9282e921 | 56 | struct git_reference { |
d00d5464 | 57 | git_refdb *db; |
d00d5464 | 58 | git_ref_t type; |
d4a0b124 VM |
59 | |
60 | union { | |
fedd0f9e | 61 | git_oid oid; |
d4a0b124 VM |
62 | char *symbolic; |
63 | } target; | |
fedd0f9e VM |
64 | |
65 | git_oid peel; | |
f36d57b9 | 66 | char name[GIT_FLEX_ARRAY]; |
9282e921 | 67 | }; |
68 | ||
24c71f14 RB |
69 | git_reference *git_reference__set_name(git_reference *ref, const char *name); |
70 | ||
c030ada7 | 71 | int git_reference__normalize_name(git_buf *buf, const char *name, unsigned int flags); |
659cf202 | 72 | int git_reference__update_terminal(git_repository *repo, const char *ref_name, const git_oid *oid, const git_signature *sig, const char *log_message); |
0adfa20a | 73 | int git_reference__is_valid_name(const char *refname, unsigned int flags); |
bf031581 | 74 | int git_reference__is_branch(const char *ref_name); |
c1b5e8c4 | 75 | int git_reference__is_remote(const char *ref_name); |
504850cd | 76 | int git_reference__is_tag(const char *ref_name); |
4e498646 | 77 | const char *git_reference__shorthand(const char *name); |
9282e921 | 78 | |
f201d613 RB |
79 | /** |
80 | * Lookup a reference by name and try to resolve to an OID. | |
81 | * | |
82 | * You can control how many dereferences this will attempt to resolve the | |
83 | * reference with the `max_deref` parameter, or pass -1 to use a sane | |
84 | * default. If you pass 0 for `max_deref`, this will not attempt to resolve | |
85 | * the reference. For any value of `max_deref` other than 0, not | |
86 | * successfully resolving the reference will be reported as an error. | |
87 | ||
88 | * The generated reference must be freed by the user. | |
89 | * | |
90 | * @param reference_out Pointer to the looked-up reference | |
91 | * @param repo The repository to look up the reference | |
92 | * @param name The long name for the reference (e.g. HEAD, ref/heads/master, refs/tags/v0.1.0, ...) | |
93 | * @param max_deref Maximum number of dereferences to make of symbolic refs, 0 means simple lookup, < 0 means use default reasonable value | |
94 | * @return 0 on success or < 0 on error; not being able to resolve the reference is an error unless 0 was passed for max_deref | |
95 | */ | |
96 | int git_reference_lookup_resolved( | |
97 | git_reference **reference_out, | |
98 | git_repository *repo, | |
99 | const char *name, | |
100 | int max_deref); | |
101 | ||
ab8d9242 CMN |
102 | int git_reference__log_signature(git_signature **out, git_repository *repo); |
103 | ||
a612a25f ET |
104 | /** Update a reference after a commit. */ |
105 | int git_reference__update_for_commit( | |
106 | git_repository *repo, | |
107 | git_reference *ref, | |
108 | const char *ref_name, | |
109 | const git_oid *id, | |
a612a25f ET |
110 | const char *operation); |
111 | ||
2f8a8ab2 | 112 | #endif |