Jacob Keller <jacob.e.keller@xxxxxxxxx> writes: > From: Jacob Keller <jacob.keller@xxxxxxxxx> > > Add an empty_tree_oid object which can be used in place of > EMPTY_TREE_SHA1_BIN_LITERAL for code which is being converted to struct > object_id. How widely do you envision the users of this symbol would be spread across the entire codebase? I am debating myself if we need a singleton in-core copy like this (if we end up referring to it from everywhere), or we only need one level higher abstraction, e.g. "is_empty_tree_oid()" helper (in which case I do not think we even need a singleton; just imitate how is_empty_blob_sha1() is implemented). Even if we need such a singleton, I think we avoid ".field = value" struct initializations in our code. > > Signed-off-by: Jacob Keller <jacob.keller@xxxxxxxxx> > --- > cache.h | 2 ++ > sha1_file.c | 3 +++ > 2 files changed, 5 insertions(+) > > diff --git a/cache.h b/cache.h > index f30a4417efdf..da9f0be67d7b 100644 > --- a/cache.h > +++ b/cache.h > @@ -964,6 +964,8 @@ static inline void oidclr(struct object_id *oid) > #define EMPTY_BLOB_SHA1_BIN \ > ((const unsigned char *) EMPTY_BLOB_SHA1_BIN_LITERAL) > > +extern const struct object_id empty_tree_oid; > + > static inline int is_empty_blob_sha1(const unsigned char *sha1) > { > return !hashcmp(sha1, EMPTY_BLOB_SHA1_BIN); > diff --git a/sha1_file.c b/sha1_file.c > index 1e23fc186a02..10883d56a600 100644 > --- a/sha1_file.c > +++ b/sha1_file.c > @@ -38,6 +38,9 @@ static inline uintmax_t sz_fmt(size_t s) { return s; } > > const unsigned char null_sha1[20]; > const struct object_id null_oid; > +const struct object_id empty_tree_oid = { > + .hash = EMPTY_TREE_SHA1_BIN_LITERAL > +}; > > /* > * This is meant to hold a *small* number of objects that you would -- To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html