Toybox hasn't always taken proper advantage of external contributions. Lots of people want to help, but their contributions languish out of tree or in the "pending" directory, awaiting cleanup.
Toybox's design goals require simpler, tighter, and more explicit code than most other implementations, among other reasons to allow better security auditing. Writing "another" implementation of standard command line tools isn't very interesting, they should be _better_ implementations. Unfortunately, this means existing, working commands often take more effort to clean up to Toybox's standards than writing a new one from scratch, not because they don't work, but because we aim for an unusual level of polish.
In hopes of teaching more people how to do this cleanup work, I've started breaking cleanup changes into smaller chunks and posting explanations of each change to the mailing list. Below are indexes of such cleanup series. Each commit and post are meant to be read together: each description explains what the corresponding patch was trying to accomplish.
Line/byte totals of completed series are given for scale, but the point of this work is simplicity and compactness, not size per se.
(Note: mercurial's web viewer doesn't follow renames, so although each command name links to a commit list with the bulk of the changes, it may not include the final version of each file moved from the "pending" directory to its final location. The summaries link the initial and cleaned versions of each file when giving line counts.)
The design of toybox page and the coding style section at the start of the source code walkthrough don't cover everything. Here are some links to mailing list messages that cover various programming topics not directly related to a specific cleanup series:
This is an example of cleaning up something that started in a condition most projects would be quite happy with. The initial submission of uuencode and uudecode was a good high quality contribution, written by a seasoned developer who did an excellent job. It was still possible to shrink uuencode almost by half:
Status: COMPLETE
I tried to do the uudecode cleanup in smaller stages than uuencode:
Status: COMPLETE
When ifconfig was submitted, it touched a half-dozen files. I glued it together into a single self-contained file, which needed a lot of cleanup. The final version is about 1/3 the size of the original.
This was the first command I started cleaning up with the intent of describing the process, and especially the first few entries in this series describe many of the low hanging fruit techniques used to clean up a codebase.
Status: COMPLETE.
814 Initial version by Gurang Shastri. 815 816 847 Felix Janda 848 Whitespace (reindent from tabs -> 2 spaces) 849 More cleanup 867 Felix Janda Improve operator processing. 874 Felix Janda 875 Felix Janda 887 Felix Janda fix -mtime
Status: in progress.
747 initial submission 810 whitespace 811 871 whitespace (reindent from 4 spaces to 2) 872 Felix Janda cleanup 885 Felix Janda move permission formatting (777 -> -rwxrwxrwx) from ls to lib so stat can reuse it. 886 Felix Janda remove unimplemented options and clean up help text 910 Felix Janda Add support for stating multiple files. 911 Felix Janda Separate stat and statfs. 912 commit description design pondering 914 916
Status: COMPLETE.