@@ -169,19 +169,26 @@ The top-level command-line interface.
169169 * Makes the crate execute as fast as possible by supporting parallel computation of otherwise long-running functions
170170 as well as fast, hardware accelerated hashing.
171171 * If disabled, the binary will be visibly smaller.
172- * ** pretty-cli** _ (default)_
173- * Use ` clap ` + ` structopt ` to build the prettiest, best documented and most user-friendly CLI at the expense of file size.
174- * ** lean-cli** _ (mutually exclusive to pretty-cli)_
175- * Use ` argh ` to produce a usable binary with decent documentation that is smallest in size, usually 300kb less than ` pretty-cli ` .
176- * If ` pretty-cli ` is enabled as well, ` small-cli ` will take precedence, and you pay for building unnecessary dependencies.
172+ * _ (mutually exclusive)_
173+ * ** pretty-cli** _ (default)_
174+ * Use ` clap ` + ` structopt ` to build the prettiest, best documented and most user-friendly CLI at the expense of file size.
175+ * provides a terminal user interface for detailed and exhaustive progress.
176+ * provides a line renderer for log-like progress
177+ * ** lean-cli**
178+ * Use ` argh ` to produce a usable binary with decent documentation that is smallest in size, usually 300kb less than ` pretty-cli ` .
179+ * If ` pretty-cli ` is enabled as well, ` small-cli ` will take precedence, and you pay for building unnecessary dependencies.
180+ * provides a line renderer for log-like progress
177181* ** prodash-line-renderer-crossterm** or ** prodash-line-renderer-termion** _ (mutually exclusive)_
178182 * The ` --verbose ` flag will be powered by an interactive progress mechanism that doubles as log as well as interactive progress
179183 that appears after a short duration.
180184
181- There are convenience features, which combine common choices of the above into one name
185+ There are ** convenience features** , which combine common choices of the above into one name
182186
183- * ** max** = * pretty-cli* + * fast*
184- * ** lean** = * lean-cli* + * fast*
187+ * ** max** = * pretty-cli* + * fast* + * prodash/tui-renderer-crossterm*
188+ * ** max-termion** = * pretty-cli* + * fast* + * prodash/tui-renderer-termion*
189+ * ** lean** = * lean-cli* + * fast* + * prodash-line-renderer-crossterm*
190+ * ** lean-termion** = * lean-cli* + * fast* + * prodash-line-renderer-termion*
191+ * ** light** = * lean-cli* + * fast*
185192* ** small** = * lean-cli*
186193
187194### git-features
@@ -237,6 +244,30 @@ All feature toggles are additive.
237244 * ...even if that includes only the most common usecases.
238245 * ** Prefer to increment major version rapidly...**
239246 * ...instead of keeping major version zero for longer than needed.
247+
248+ ## Plumbing vs Porcelain
249+
250+ Both terms are coming from the ` git ` implementation itself, even though it won't necessarily point out which commands are plumbing and which
251+ are porcelain.
252+ The term * plumbing* refers to lower-level, more rarely used commands that complement porcelain by being invoked by it or for special use
253+ cases.
254+ The term * porcelain* refers to those with a decent user experience, they are primarily intended for use by humans.
255+
256+ In any case, both types of programs must self-document their capabilities using through the ` --help ` flag.
257+
258+ From there, we can derive a few rules to try to adhere to:
259+
260+ ### Plumbing
261+
262+ * does not show any progress or logging output by default
263+ * if supported and logging is enabled, it will show timestamps in UTC
264+
265+ ### Porcelain
266+
267+ * Provides output to stderr by default to provide progress information. There is no need to allow disabling it, but it shouldn't show up unless
268+ the operation takes some time.
269+ * If timestamps are shown, they are in localtime.
270+ * Non-progress information goes to stdout.
240271
241272## Maintenance Guide
242273
@@ -263,6 +294,9 @@ Thus one has to post-process the file by reducing its size by one using `truncat
263294
264295## Shortcomings
265296
297+ * ** lean** and ** light** and ** small** builds don't support non-UTF-8 paths
298+ * This is because they depend on ` argh ` , which [ does not yet support parsing OsStrings] ( https://github.com/google/argh/issues/33 ) . We however
299+ believe it eventually will do so and thus don't move on to [ ` pico-args ` ] ( https://github.com/RazrFalcon/pico-args/blob/master/examples/app.rs ) .
266300* ** Packfiles use memory maps**
267301 * Even though they are comfortable to use and fast, they squelch IO errors.
268302 * _ potential remedy_ : We could generalize the Pack to make it possible to work on in-memory buffers directly. That way, one
@@ -284,5 +318,5 @@ Thus one has to post-process the file by reducing its size by one using `truncat
284318## Fun facts
285319
286320* Originally I was really fascinated by [ this problem] ( https://github.com/gitpython-developers/GitPython/issues/765#issuecomment-396072153 )
287- and believe that with ` gitoxide ` it will be possible to provide the fastest implementation for that problem .
321+ and believe that with ` gitoxide ` it will be possible to provide the fastest solution for it .
288322
0 commit comments