aboutsummaryrefslogtreecommitdiff
path: root/sha1_name.c
diff options
context:
space:
mode:
authorJeff King <peff@peff.net>2016-09-26 07:59:01 -0400
committerJunio C Hamano <gitster@pobox.com>2016-09-26 11:21:28 -0700
commit259942f549eb235e9d7d095c2db8f3dc279f3958 (patch)
tree18bd433040d80c907bc2b0d34403c3b88ac76481 /sha1_name.c
parent6fe1b1407ed91823daa5d487abe457ff37463349 (diff)
downloadgit-259942f549eb235e9d7d095c2db8f3dc279f3958.tar.gz
git-259942f549eb235e9d7d095c2db8f3dc279f3958.tar.xz
get_sha1: detect buggy calls with multiple disambiguators
The get_sha1() family of functions takes a flags field, but some of the flags are mutually exclusive. In particular, we can only handle one disambiguating function, and the flags quietly override each other. Let's instead detect these as programming bugs. Technically some of the flags are supersets of the others, so treating COMMITTISH|TREEISH as just COMMITTISH is not wrong, but it's a good sign the caller is confused. And certainly asking for BLOB|TREE does not work. We can do the check easily with some bit-twiddling, and as a bonus, the bit-mask of disambiguators will come in handy in a future patch. Signed-off-by: Jeff King <peff@peff.net> Signed-off-by: Junio C Hamano <gitster@pobox.com>
Diffstat (limited to 'sha1_name.c')
-rw-r--r--sha1_name.c4
1 files changed, 4 insertions, 0 deletions
diff --git a/sha1_name.c b/sha1_name.c
index faf873cf7..0ff83a998 100644
--- a/sha1_name.c
+++ b/sha1_name.c
@@ -327,6 +327,10 @@ static int get_short_sha1(const char *name, int len, unsigned char *sha1,
prepare_alt_odb();
memset(&ds, 0, sizeof(ds));
+
+ if (HAS_MULTI_BITS(flags & GET_SHA1_DISAMBIGUATORS))
+ die("BUG: multiple get_short_sha1 disambiguator flags");
+
if (flags & GET_SHA1_COMMIT)
ds.fn = disambiguate_commit_only;
else if (flags & GET_SHA1_COMMITTISH)