refs.c: change resolve_ref_unsafe reading argument to be a flags field
resolve_ref_unsafe takes a boolean argument for reading (a nonexistent ref resolves successfully for writing but not for reading). Change this to be a flags field instead, and pass the new constant RESOLVE_REF_READING when we want this behaviour. While at it, swap two of the arguments in the function to put output arguments at the end. As a nice side effect, this ensures that we can catch callers that were unaware of the new API so they can be audited. Give the wrapper functions resolve_refdup and read_ref_full the same treatment for consistency. Signed-off-by: Ronnie Sahlberg <sahlberg@google.com> Signed-off-by: Jonathan Nieder <jrnieder@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:

committed by
Junio C Hamano

parent
aae383db8c
commit
7695d118e5
23
cache.h
23
cache.h
@ -950,8 +950,8 @@ extern int for_each_abbrev(const char *prefix, each_abbrev_fn, void *);
|
||||
extern int get_sha1_hex(const char *hex, unsigned char *sha1);
|
||||
|
||||
extern char *sha1_to_hex(const unsigned char *sha1); /* static buffer result! */
|
||||
extern int read_ref_full(const char *refname, unsigned char *sha1,
|
||||
int reading, int *flags);
|
||||
extern int read_ref_full(const char *refname, int resolve_flags,
|
||||
unsigned char *sha1, int *flags);
|
||||
extern int read_ref(const char *refname, unsigned char *sha1);
|
||||
|
||||
/*
|
||||
@ -963,20 +963,20 @@ extern int read_ref(const char *refname, unsigned char *sha1);
|
||||
* or the input ref.
|
||||
*
|
||||
* If the reference cannot be resolved to an object, the behavior
|
||||
* depends on the "reading" argument:
|
||||
* depends on the RESOLVE_REF_READING flag:
|
||||
*
|
||||
* - If reading is set, return NULL.
|
||||
* - If RESOLVE_REF_READING is set, return NULL.
|
||||
*
|
||||
* - If reading is not set, clear sha1 and return the name of the last
|
||||
* reference name in the chain, which will either be a non-symbolic
|
||||
* - If RESOLVE_REF_READING is not set, clear sha1 and return the name of
|
||||
* the last reference name in the chain, which will either be a non-symbolic
|
||||
* reference or an undefined reference. If this is a prelude to
|
||||
* "writing" to the ref, the return value is the name of the ref
|
||||
* that will actually be created or changed.
|
||||
*
|
||||
* If flag is non-NULL, set the value that it points to the
|
||||
* If flags is non-NULL, set the value that it points to the
|
||||
* combination of REF_ISPACKED (if the reference was found among the
|
||||
* packed references) and REF_ISSYMREF (if the initial reference was a
|
||||
* symbolic reference).
|
||||
* packed references), REF_ISSYMREF (if the initial reference was a
|
||||
* symbolic reference) and REF_ISBROKEN (if the ref is malformed).
|
||||
*
|
||||
* If ref is not a properly-formatted, normalized reference, return
|
||||
* NULL. If more than MAXDEPTH recursive symbolic lookups are needed,
|
||||
@ -984,8 +984,9 @@ extern int read_ref(const char *refname, unsigned char *sha1);
|
||||
*
|
||||
* errno is set to something meaningful on error.
|
||||
*/
|
||||
extern const char *resolve_ref_unsafe(const char *ref, unsigned char *sha1, int reading, int *flag);
|
||||
extern char *resolve_refdup(const char *ref, unsigned char *sha1, int reading, int *flag);
|
||||
#define RESOLVE_REF_READING 0x01
|
||||
extern const char *resolve_ref_unsafe(const char *ref, int resolve_flags, unsigned char *sha1, int *flags);
|
||||
extern char *resolve_refdup(const char *ref, int resolve_flags, unsigned char *sha1, int *flags);
|
||||
|
||||
extern int dwim_ref(const char *str, int len, unsigned char *sha1, char **ref);
|
||||
extern int dwim_log(const char *str, int len, unsigned char *sha1, char **ref);
|
||||
|
Reference in New Issue
Block a user