@@ -235,11 +235,6 @@ Provide a CLI to for the most basic user journey:
235235 * [ ] create (thin) pack
236236* [ ] transform _ all_ ` unwrap() ` calls into ` expect(…) ` or ` ? ` for quality. ` parking_lot ` will help for unwraps of poisoned locks.
237237
238- ### Roadmap to 1.1
239-
240- * [ ] clone a repository via
241- * [ ] ssh
242-
243238## Cargo features guide
244239
245240Cargo uses feature toggles to control which dependencies are pulled in, allowing users to specialize crates to fit their usage.
@@ -280,7 +275,7 @@ There are **convenience features**, which combine common choices of the above in
280275* ** light** = * lean-cli* + * fast*
281276 * crossplatform by nature as this comes with simplified log based progress
282277* ** small** = * lean-cli*
283- * As small as it can possibly be, no threading, no fast sha1, log based progress only
278+ * As small as it can possibly be, no threading, no fast sha1, log based progress only, no cleanup of temporary files on interrupt
284279
285280### git-features
286281
@@ -301,7 +296,7 @@ All feature toggles are additive.
301296* ** progress-prodash**
302297 * Implement the ` Progress ` trait for the tree data structures provided by ` prodash ` , which enables using a terminal user
303298 interface for progress.
304- * ** interuptible **
299+ * ** interruptible **
305300 * Listen to interrupts and termination requests and provide long-running operations tooling to allow aborting the input stream.
306301 * If unset, these utilities will be a no-op which may lead to leaking temporary files when interrupted.
307302 * If the application already sets a handler, this handler will have no effect.
@@ -342,6 +337,32 @@ All feature toggles are additive.
342337
343338### Guidelines
344339
340+ * ** async**
341+ * ** library client-side**
342+ * Don't use it client side, as operations there are usually bound by the CPU and ultra-fast access to memory mapped files.
343+ It's no problem to saturate either CPU or the IO system.
344+ * ** User Interfaces**
345+ * User interfaces can greatly benefit from using async as it's much easier to maintain a responsive UI thread that way thanks
346+ to the wonderful future combinators.
347+ * ` blocking ` can be used to make ` Read ` and ` Iterator ` async, or move any operation onto a thread which blends it into the
348+ async world.
349+ * Most operations are fast and 'interrupting' them is as easy as ignoring their result by cancelling their task.
350+ * Long-running operations can be roughly interacted with using ` git_features::interruptible::interrupt() ` function, and after a moment
351+ of waiting the flag can be unset with the ` …::uninterrupt() ` function to allow new long-running operations to work.
352+ Every long running operation supports this.
353+ * ** server-side**
354+ * Building a pack is CPU and at some point, IO bound, and it makes no sense to use async to handle more connections - git
355+ needs a lot of resources and threads will do just fine.
356+
357+ * ** interruption of long-running operations**
358+ * Use ` git-features::interruptible::* ` for building support for interruptions of long-running operations only.
359+ * It's up to the author to decide how to best integrate it, generally we use a poll-based mechanism to check whether
360+ an interrupt flag is set.
361+ * ** this is a must if…**
362+ * …temporary resources like files might otherwise be leaked
363+ * ** this is optional but desirable if…**
364+ * …there is no leakage otherwise to support user interfaces. They background long-running operations and need them to be cancellable.
365+
345366* ** prepare for SHA256 support by using ` owned::Id ` and ` borrowed::Id ` **
346367 * eventually there will be the need to support both Sha1 and Sha256. We anticipate it by using the ` Id ` type instead
347368 of slices or arrays of 20 bytes. This way, eventually we can support multiple hash digest sizes.
@@ -381,6 +402,7 @@ From there, we can derive a few rules to try adhere to:
381402
382403* does not show any progress or logging output by default
383404* if supported and logging is enabled, it will show timestamps in UTC
405+ * it does not need a git repository, but instead takes all variables via the command-line
384406
385407### Porcelain
386408
0 commit comments