Show 38 quoted lines
> From: David Turner <dturner@twitter.com>
>
> Wire up get_sha1_with_context to call get_tree_entry_follow_symlinks
> when GET_SHA1_FOLLOW_SYMLINKS is passed in flags. G_S_FOLLOW_SYMLINKS
> is incompatible with G_S_ONLY_TO_DIE because the diagnosis
> that ONLY_TO_DIE triggers does not at present consider symlinks, and
> it would be a significant amount of additional code to allow it to
> do so.
>
> Signed-off-by: David Turner <dturner@twitter.com>
> ---
> cache.h | 20 +++++++++++++-------
> sha1_name.c | 20 +++++++++++++++-----
> 2 files changed, 28 insertions(+), 12 deletions(-)
>
> diff --git a/cache.h b/cache.h
> index 3d3244b..65505d1 100644
> --- a/cache.h
> +++ b/cache.h
> @@ -922,15 +922,21 @@ struct object_context {
> unsigned char tree[20];
> char path[PATH_MAX];
> unsigned mode;
> + /*
> + * symlink_path is only used by get_tree_entry_follow_symlinks,
> + * and only for symlinks that point outside the repository.
> + */
> + struct strbuf symlink_path;
> };
>...
> @@ -1469,5 +1477,7 @@ void maybe_die_on_misspelt_object_name(const char *name, const char *prefix)
>
> int get_sha1_with_context(const char *str, unsigned flags, unsigned char *sha1, struct object_context *orc)
> {
> + if (flags & GET_SHA1_FOLLOW_SYMLINKS && flags & GET_SHA1_ONLY_TO_DIE)
> + die("BUG: incompatible flags for get_sha1_with_context");
> return get_sha1_with_context_1(str, flags, NULL, sha1, orc);
> }