On Mon, Nov 5, 2018 at 2:02 AM brian m. carlson <sandals@xxxxxxxxxxxxxxxxxxxx> wrote: > > I'm currently working on getting Git to support multiple hash algorithms > in the same binary (SHA-1 and SHA-256). In order to have a fully > functional binary, we'll need to have some way of indicating to certain > commands (such as init and show-index) that they should assume a certain > hash algorithm. > > There are basically two approaches I can take. The first is to provide > each command that needs to learn about this with its own --hash > argument. So we'd have: > > git init --hash=sha256 > git show-index --hash=sha256 <some-file > > The other alternative is that we provide a global option to git, which > is parsed by all programs, like so: > > git --hash=sha256 init > git --hash=sha256 show-index <some-file > I suppose this is about the "no repository/standalone" mode, because - it's hard to pass global arguments down to builtin commands (we often have to rely on global variables which are on the way out) - global options confuse new people and also harder to reorder (if you forget it, you have to alt-b all the way back to near the beginning of the command line and add it there, instead of near the end) - there aren't that many standalone commands I'm leaning towards "git foo --hash=". > There's also the question of what we want to call the option. The > obvious name is --hash, which is intuitive and straightforward. > However, the transition plan names the config option > extensions.objectFormat, so --object-format is also a possibility. If > we ever decide to support, say, zstd compression instead of zlib, we > could leverage the same option (say, --object-format=sha256:zstd) and > avoid the need for an additional option. This might be planning for a > future that never occurs, though. --object-format is less vague than --hash. The downside is it's longer (more to type) but I'm counting on git-completion.bash and the guess that people rarely need to use this option. -- Duy