]> git.ipfire.org Git - thirdparty/git.git/blame - object-name.h
Merge branch 'rs/date-mode-pass-by-value'
[thirdparty/git.git] / object-name.h
CommitLineData
dabab1d6
EN
1#ifndef OBJECT_NAME_H
2#define OBJECT_NAME_H
3
4#include "object.h"
5#include "strbuf.h"
6
7struct object_id;
8struct repository;
9
10struct object_context {
11 unsigned short mode;
12 /*
13 * symlink_path is only used by get_tree_entry_follow_symlinks,
14 * and only for symlinks that point outside the repository.
15 */
16 struct strbuf symlink_path;
17 /*
18 * If GET_OID_RECORD_PATH is set, this will record path (if any)
19 * found when resolving the name. The caller is responsible for
20 * releasing the memory.
21 */
22 char *path;
23};
24
25/*
26 * Return an abbreviated sha1 unique within this repository's object database.
27 * The result will be at least `len` characters long, and will be NUL
28 * terminated.
29 *
30 * The non-`_r` version returns a static buffer which remains valid until 4
31 * more calls to repo_find_unique_abbrev are made.
32 *
33 * The `_r` variant writes to a buffer supplied by the caller, which must be at
34 * least `GIT_MAX_HEXSZ + 1` bytes. The return value is the number of bytes
35 * written (excluding the NUL terminator).
36 *
37 * Note that while this version avoids the static buffer, it is not fully
38 * reentrant, as it calls into other non-reentrant git code.
39 */
40const char *repo_find_unique_abbrev(struct repository *r, const struct object_id *oid, int len);
41int repo_find_unique_abbrev_r(struct repository *r, char *hex, const struct object_id *oid, int len);
42
f9401850
CW
43/**
44 * Add the abbreviation, as generated by repo_find_unique_abbrev(), of `sha1` to
45 * the strbuf `sb`.
46 */
47void strbuf_repo_add_unique_abbrev(struct strbuf *sb, struct repository *repo,
48 const struct object_id *oid, int abbrev_len);
49void strbuf_add_unique_abbrev(struct strbuf *sb, const struct object_id *oid,
50 int abbrev_len);
51
dabab1d6
EN
52int repo_get_oid(struct repository *r, const char *str, struct object_id *oid);
53__attribute__((format (printf, 2, 3)))
54int get_oidf(struct object_id *oid, const char *fmt, ...);
55int repo_get_oid_commit(struct repository *r, const char *str, struct object_id *oid);
56int repo_get_oid_committish(struct repository *r, const char *str, struct object_id *oid);
57int repo_get_oid_tree(struct repository *r, const char *str, struct object_id *oid);
58int repo_get_oid_treeish(struct repository *r, const char *str, struct object_id *oid);
59int repo_get_oid_blob(struct repository *r, const char *str, struct object_id *oid);
60int repo_get_oid_mb(struct repository *r, const char *str, struct object_id *oid);
61void maybe_die_on_misspelt_object_name(struct repository *repo,
62 const char *name,
63 const char *prefix);
64enum get_oid_result get_oid_with_context(struct repository *repo, const char *str,
65 unsigned flags, struct object_id *oid,
66 struct object_context *oc);
67
68
69typedef int each_abbrev_fn(const struct object_id *oid, void *);
52fca06d
EB
70int repo_for_each_abbrev(struct repository *r, const char *prefix,
71 const struct git_hash_algo *algo, each_abbrev_fn, void *);
dabab1d6
EN
72
73int set_disambiguate_hint_config(const char *var, const char *value);
74
75/*
76 * This reads short-hand syntax that not only evaluates to a commit
77 * object name, but also can act as if the end user spelled the name
78 * of the branch from the command line.
79 *
80 * - "@{-N}" finds the name of the Nth previous branch we were on, and
81 * places the name of the branch in the given buf and returns the
82 * number of characters parsed if successful.
83 *
84 * - "<branch>@{upstream}" finds the name of the other ref that
85 * <branch> is configured to merge with (missing <branch> defaults
86 * to the current branch), and places the name of the branch in the
87 * given buf and returns the number of characters parsed if
88 * successful.
89 *
90 * If the input is not of the accepted format, it returns a negative
91 * number to signal an error.
92 *
93 * If the input was ok but there are not N branch switches in the
94 * reflog, it returns 0.
95 */
96#define INTERPRET_BRANCH_LOCAL (1<<0)
97#define INTERPRET_BRANCH_REMOTE (1<<1)
98#define INTERPRET_BRANCH_HEAD (1<<2)
99struct interpret_branch_name_options {
100 /*
101 * If "allowed" is non-zero, it is a treated as a bitfield of allowable
102 * expansions: local branches ("refs/heads/"), remote branches
103 * ("refs/remotes/"), or "HEAD". If no "allowed" bits are set, any expansion is
104 * allowed, even ones to refs outside of those namespaces.
105 */
106 unsigned allowed;
107
108 /*
109 * If ^{upstream} or ^{push} (or equivalent) is requested, and the
110 * branch in question does not have such a reference, return -1 instead
111 * of die()-ing.
112 */
113 unsigned nonfatal_dangling_mark : 1;
114};
115int repo_interpret_branch_name(struct repository *r,
116 const char *str, int len,
117 struct strbuf *buf,
118 const struct interpret_branch_name_options *options);
119
120struct object *repo_peel_to_type(struct repository *r,
121 const char *name, int namelen,
122 struct object *o, enum object_type);
123
124/* Convert to/from hex/sha1 representation */
125#define MINIMUM_ABBREV minimum_abbrev
126#define DEFAULT_ABBREV default_abbrev
127
128/* used when the code does not know or care what the default abbrev is */
129#define FALLBACK_DEFAULT_ABBREV 7
130
131#endif /* OBJECT_NAME_H */