Jeff King <peff@peff.net> writes:That's also I wondered, but I also can understand where David is coming from, and I agree with him to a certain degree. When I learned git, I learned a lot from trying to piece my own plumbing together, since there weren't much Porcelain to speak of back then. Then we had many usability enhancements before the 1.0 release to add Porcelainish done as shell scripts. This had two positive effects, aside from adding usability. Interested people had more shell scripts to learn from. The scripts were easy to adjust to feature requests from the list, and as we learned from user experience based on these scripts it was definitely quicker to codify the best current practice workflow in them than if they were written in C. It would have taken us a lot more effort to add "git commit -o paths" vs "git commit -i paths" if it were already converted to C, for example. This continued and our Porcelainish scripts matured quickly. Then 1.3 series started to move some of the mature ones into C. As many people already have pointed out, being written in C and not doing pipe() has two advantages (better portability to platforms with awkward pipe support and one less process usually mean better performance). git-log family with path limiting had a real boost in performance because the path limiting can be done in the revision traversal side not diff-tree that used to be on the downstream side of the pipe. So this in overall was a right thing to do. One thing we lost during the process, however, is a ready access to the pool of "sample scripts" when people would want to scratch their own itches. Linus's original tutorial talked about "this pattern of pipe is so useful that we have a three liner shell script wrapper that is called git-foo", and interested people can easily look at how the plumbing commands fit together. The plumbing is still there, and I and people who already know git would still script around git-rev-list when we need to (by the way, scripting around git-log is a wrong thing to do -- it is for human consumption and scripting should be done with plumbing). But when we rewrote mature ones in C (and I keep stressing "mature" because another thing I agree with David is that shell is definitely easier to futz with), we did not leave the older shell implementation around as reference. People coming to git after 1.3 series certainly do have harder time to learn how plumbing would fit together than when git old-timers learned it, if that is the area they are interested in, as opposed to just using git as a revision tracking system. We could probably do two things to address this issue: - Create examples/ hierarchy in the source tree to house these historical implementations as a reference material, or an entirely different branch or repository to house them. - Learn the itches David and other people have, that the current git Porcelain-ish does not scratch well, and enrich Documentation/technical with real-world working scripts built around plumbing. - To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
| Greg KH | Og dreams of kernels |
| Jens Axboe | [PATCH 31/33] Fusion: sg chaining support |
| Arnd Bergmann | Re: finding your own dead "CONFIG_" variables |
| Mark Brown | [PATCH 2/2] Subject: natsemi: Allow users to disable workaround for DspCfg reset |
| Tony Breeds | [LGUEST] Look in object dir for .config |
git: | |
| Brian Downing | Re: Git in a Nutshell guide |
| John Benes | Re: master has some toys |
| Matthias Lederhofer | [PATCH 4/7] introduce GIT_WORK_TREE to specify the work tree |
| Alexander Sulfrian | [RFC/PATCH] RE: git calls SSH_ASKPASS even if DISPLAY is not set |
| Junio C Hamano | Re: Rss produced by git is not valid xml? |
| Linux Kernel Mailing List | iSeries: fix section mismatch in iseries_veth |
| Linux Kernel Mailing List | ixbge: remove TX l |
