On Sat, Oct 28, 2017 at 2:12 PM, brian m. carlson <sandals@xxxxxxxxxxxxxxxxxxxx> wrote: > In future versions of Git, we plan to support an additional hash > algorithm. Integrate the enumeration of hash algorithms with repository > setup, and store a pointer to the enumerated data in struct repository. > Of course, we currently only support SHA-1, so hard-code this value in > read_repository_format. In the future, we'll enumerate this value from > the configuration. > [...] > Signed-off-by: brian m. carlson <sandals@xxxxxxxxxxxxxxxxxxxx> > --- > diff --git a/cache.h b/cache.h > @@ -132,6 +133,8 @@ struct git_hash_algo { > extern const struct git_hash_algo hash_algos[GIT_HASH_NALGOS]; > > +#define current_hash the_repository->hash_algo The all-lowercase name "current_hash" seems likely to conflict with a variable name some day; the fact that it is also a #define makes such a collision even more worrisome. Although it is retrieving the "hash algorithm", when reading the terse name "current_hash", one may instead intuitively think it is referring to a hash _value_ (not an algorithm). > diff --git a/repository.c b/repository.c > @@ -64,6 +64,11 @@ void repo_set_gitdir(struct repository *repo, const char *path) > +void repo_set_hash_algo(struct repository *repo, int hash_algo) > +{ > + repo->hash_algo = &hash_algos[hash_algo]; > +} > + > /* > * Attempt to resolve and set the provided 'gitdir' for repository 'repo'. > * Return 0 upon success and a non-zero value upon failure. > @@ -136,6 +141,8 @@ int repo_init(struct repository *repo, const char *gitdir, const char *worktree) > if (read_and_verify_repository_format(&format, repo->commondir)) > goto error; > > + repo->hash_algo = &hash_algos[format.hash_algo]; Should this be instead invoking repo_set_hash_algo()? > if (worktree) > repo_set_worktree(repo, worktree);