diff options
author | Junio C Hamano <gitster@pobox.com> | 2015-06-01 12:45:16 -0700 |
---|---|---|
committer | Junio C Hamano <gitster@pobox.com> | 2015-06-01 12:45:16 -0700 |
commit | 67f0b6f3b2226ea858c616028375dcc3c46ccc37 (patch) | |
tree | 598a4db2b8e80916be9c2074490070bdd15e4df4 /sha1_name.c | |
parent | 4ba5bb5531c6ec64a57ae2754ba51ce477eebaf0 (diff) | |
parent | 122d53464b29d3ac20891c5ee2f75ac5ecbb7b20 (diff) | |
download | git-67f0b6f3b2226ea858c616028375dcc3c46ccc37.tar.gz |
Merge branch 'dt/cat-file-follow-symlinks'
"git cat-file --batch(-check)" learned the "--follow-symlinks"
option that follows an in-tree symbolic link when asked about an
object via extended SHA-1 syntax, e.g. HEAD:RelNotes that points at
Documentation/RelNotes/2.5.0.txt. With the new option, the command
behaves as if HEAD:Documentation/RelNotes/2.5.0.txt was given as
input instead.
* dt/cat-file-follow-symlinks:
cat-file: add --follow-symlinks to --batch
sha1_name: get_sha1_with_context learns to follow symlinks
tree-walk: learn get_tree_entry_follow_symlinks
Diffstat (limited to 'sha1_name.c')
-rw-r--r-- | sha1_name.c | 20 |
1 files changed, 15 insertions, 5 deletions
diff --git a/sha1_name.c b/sha1_name.c index 6de8c87c8a..46218ba02c 100644 --- a/sha1_name.c +++ b/sha1_name.c @@ -1433,11 +1433,19 @@ static int get_sha1_with_context_1(const char *name, new_filename = resolve_relative_path(filename); if (new_filename) filename = new_filename; - ret = get_tree_entry(tree_sha1, filename, sha1, &oc->mode); - if (ret && only_to_die) { - diagnose_invalid_sha1_path(prefix, filename, - tree_sha1, - name, len); + if (flags & GET_SHA1_FOLLOW_SYMLINKS) { + ret = get_tree_entry_follow_symlinks(tree_sha1, + filename, sha1, &oc->symlink_path, + &oc->mode); + } else { + ret = get_tree_entry(tree_sha1, filename, + sha1, &oc->mode); + if (ret && only_to_die) { + diagnose_invalid_sha1_path(prefix, + filename, + tree_sha1, + name, len); + } } hashcpy(oc->tree, tree_sha1); strlcpy(oc->path, filename, sizeof(oc->path)); @@ -1468,5 +1476,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); } |