From cf43ca2a7bcb70bc9e77e882f620a4291960a9f5 Mon Sep 17 00:00:00 2001
From: Nick Craig-Wood <nick@craig-wood.com>
Date: Mon, 12 Sep 2016 17:30:37 +0100
Subject: [PATCH] Document which remotes support which optional features

---
 docs/content/overview.md | 63 ++++++++++++++++++++++++++++++++++++++++
 1 file changed, 63 insertions(+)

diff --git a/docs/content/overview.md b/docs/content/overview.md
index eba889832..26bb0d319 100644
--- a/docs/content/overview.md
+++ b/docs/content/overview.md
@@ -77,3 +77,66 @@ objects with the same name.
 
 This confuses rclone greatly when syncing - use the `rclone dedupe`
 command to rename or remove duplicates.
+
+## Optional Features ##
+
+All the remotes support a basic set of features, but there are some
+optional features supported by some remotes used to make some
+operations more efficient.
+
+| Name                   | Purge | Copy | Move | DirMove | CleanUp |
+| ---------------------- |:-----:|:----:|:----:|:-------:|:-------:|
+| Google Drive           | Yes   | Yes  | Yes  | Yes     | No  [#575](https://github.com/ncw/rclone/issues/575) | 
+| Amazon S3              | No    | Yes  | No   | No      | No      |
+| Openstack Swift        | Yes † | Yes  | No   | No      | No      |
+| Dropbox                | Yes   | Yes  | Yes  | Yes     | No  [#575](https://github.com/ncw/rclone/issues/575) |
+| Google Cloud Storage   | Yes   | Yes  | No   | No      | No      |
+| Amazon Drive           | Yes   | No   | No [#721](https://github.com/ncw/rclone/issues/721) | No [#721](https://github.com/ncw/rclone/issues/721)    | No [#575](https://github.com/ncw/rclone/issues/575) |
+| Microsoft One Drive    | Yes   | Yes  | No [#197](https://github.com/ncw/rclone/issues/197) | No [#197](https://github.com/ncw/rclone/issues/197)    | No [#575](https://github.com/ncw/rclone/issues/575) |
+| Hubic                  | Yes † | Yes  | No   | No      | No      |
+| Backblaze B2           | No    | No   | No   | No      | Yes     |
+| Yandex Disk            | Yes   | No   | No   | No      | No  [#575](https://github.com/ncw/rclone/issues/575) |
+| The local filesystem   | Yes   | No   | Yes  | Yes     | No      |
+
+
+### Purge ###
+
+This deletes a directory quicker than just deleting all the files in
+the directory.
+
+† Note Swift and Hubic implement this in order to delete directory
+markers but they don't actually have a quicker way of deleting files
+other than deleting them individually.
+
+### Copy ###
+
+Used when copying an object to and from the same remote.  This known
+as a server side copy so you can copy a file without downloading it
+and uploading it again.  It is used if you use `rclone copy` or
+`rclone move` if the remote doesn't support `Move` directly.
+
+If the server doesn't support `Copy` directly then for copy operations
+the file is downloaded then re-uploaded.
+
+### Move ###
+
+Used when moving/renaming an object on the same remote.  This is known
+as a server side move of a file.  This is used in `rclone move` if the
+server doesn't support `DirMove`.
+
+If the server isn't capable of `Move` then rclone simulates it with
+`Copy` then delete.  If the server doesn't support `Copy` then rclone
+will download the file and re-upload it.
+
+### DirMove ###
+
+This is used to implement `rclone move` to move a directory if
+possible.  If it isn't then it will use `Move` on each file (which
+falls back to `Copy` then download and upload - see `Move` section).
+
+### CleanUp ###
+
+This is used for emptying the trash for a remote by `rclone cleanup`.
+
+If the server can't do `CleanUp` then `rclone cleanup` will return an
+error.