On Mon, Mar 20, 2017 at 7:56 PM, Junio C Hamano <gitster@xxxxxxxxx> wrote: > One thing we may want to consider is why we have to even worry about > scripts getting broken. It is because people script around > Porcelain, and that is because we have been too eager to improve > Porcelain while neglecting plumbing for too long, to the point that > some things are only doable with Porcelain (or doing the same with > plumbing while possible are made too cumbersome). I find it quite > disturbing that nobody brought that up as an issue that needs to be > addressed in this entire thread. I very much doubt this describes anything but a tiny number of cases where people are using the porcelain as an API. People aren't going through the process of trying to find out how to do something with a plumbing command, and then failing and falling back to a porcelain command because the plumbing isn't complete enough. They just use the porcelain because they're familiar with it and scripting it works for them. E.g. I just looked at both major Emacs modes for git now, magit & vc-git, neither use "mktag", they just shell out to "git tag" for making tags. I just went to the git-scm.com website and looked at one open source GUI client I could "git clone", Giggle. It just shells out to e.g. "git commit" to make commits, not "git commit-tree". The other commands they're using are porcelain too. If they've used some plumbing it's probably by sheer accident. E.g. they use ls-tree which is plumbing, but don't use for-each-ref. What's that Google SRE-ism again? Something like "People use the reliability you provide them with in practice, not what you advertise". Our porcelain is very stable, and so people use it as a stable API, and not just for trivial scripts. Which I think has some big implications for how we maintain the porcelain & plumbing. Since people *will* use the porcelain, probably no matter what we advertise to them or how good the plumbing is.