Recent changes to this wiki:

diff --git a/doc/bugs/git_annex_assistant_leaks_a_lot_of_memory.mdwn b/doc/bugs/git_annex_assistant_leaks_a_lot_of_memory.mdwn
new file mode 100644
index 0000000..3f701b7
--- /dev/null
+++ b/doc/bugs/git_annex_assistant_leaks_a_lot_of_memory.mdwn
@@ -0,0 +1,9 @@
+Hi,
+
+I have a git-annex repository on a server managed by git annex assistant in indirect mode and as a backup group serving my org-mode files (organizer module for emacs) which are plain text files no more than a 100kb.
+
+I also have 2 clients in direct mode to sync the files across my computers.
+
+I save my files fairly often so the assistant might be a bit overwhelmed but I think it can managed that. At least it used to.
+
+Since maybe a couple months, the assistant running on the server has been leaking nearly 1Gb each day and I suspect it rises whenever I push files to it.

comment
diff --git a/doc/bugs/rsync_fails_with_sync_error:_syntax_or_usage_error_/comment_1_464d733de18f6ca438ebd84e88b8cee2._comment b/doc/bugs/rsync_fails_with_sync_error:_syntax_or_usage_error_/comment_1_464d733de18f6ca438ebd84e88b8cee2._comment
new file mode 100644
index 0000000..ea9db7b
--- /dev/null
+++ b/doc/bugs/rsync_fails_with_sync_error:_syntax_or_usage_error_/comment_1_464d733de18f6ca438ebd84e88b8cee2._comment
@@ -0,0 +1,29 @@
+[[!comment format=mdwn
+ username="joey"
+ subject="""comment 1"""
+ date="2014-10-31T20:45:41Z"
+ content="""
+This is a rsync protocol level error; one side is sending something
+that the other side fails to deal with. We can see in your log that the
+two rsync are communicating successfully over the ssh connection
+at first.
+
+This could be something not clean about your ssh connection, or some incompatability
+in the versions of rsync or git-annex between the client and the server.
+It probably wouldn't hurt to make sure client and server have the same rsync
+version, and perhaps upgrade them both to the newest git-annex in case this
+problem is somehow fixed there.
+
+Then, seems to me that the next step is to get git-annex-shell out of the
+picture and see if you can still reproduce the problem. You can find the rsync
+command that git-annex-shell runs by passing --debug to it. The just replace
+the git-annex-shell command in your python code with the rsync command it runs.
+
+Here's a shell command line I came up with by doing that. It will have
+different paths for your repo, and localhost will need to be changed to your
+server's name.
+
+<pre>
+rsync --progress --inplace --perms --debug=all -e 'ssh  -4 -T localhost "rsync --server -t --inplace -e.Lsf . //home/joey/annex/.git/annex/tmp/SHA256E-s30--bdce956a335681853344fce6f1f940a5c8b7061007398661a3b14f2037843744" dummy rsync --server -pe.Lsfx --log-format=X --debug=ALL --inplace . .'  /tmp/annex/.git/annex/objects/Wx/Mf/SHA256E-s30--bdce956a335681853344fce6f1f940a5c8b7061007398661a3b14f2037843744/SHA256E-s30--bdce956a335681853344fce6f1f940a5c8b7061007398661a3b14f2037843744 dummy:
+</pre>
+"""]]

comment
diff --git a/doc/forum/Using_git-annex/comment_1_ac386ca07e9aaf009c264f3deed83832._comment b/doc/forum/Using_git-annex/comment_1_ac386ca07e9aaf009c264f3deed83832._comment
new file mode 100644
index 0000000..9e0e8ff
--- /dev/null
+++ b/doc/forum/Using_git-annex/comment_1_ac386ca07e9aaf009c264f3deed83832._comment
@@ -0,0 +1,16 @@
+[[!comment format=mdwn
+ username="joey"
+ subject="""comment 1"""
+ date="2014-10-31T20:40:18Z"
+ content="""
+git does not allow pushing into a non-bare repsitory. This is why
+bare repositories exist.
+
+You have basically 3 choices:
+
+1. Go to the first repo you made, and `git pull` from the other repo
+   into it. Pulling in this direction will work.
+2. Set up a bare repo that both the non-bare repos use.
+3. Use `git annex sync`, which avoids this problem. You need to run
+   it in both repos in order to get them to sync with one-another.
+"""]]

comment and associated todo
diff --git a/doc/todo/find_unused_in_any_commit.mdwn b/doc/todo/find_unused_in_any_commit.mdwn
new file mode 100644
index 0000000..11bbbd7
--- /dev/null
+++ b/doc/todo/find_unused_in_any_commit.mdwn
@@ -0,0 +1,14 @@
+`git annex unused` only looks at tags and branches. Some users would like
+to drop any objects that are not pointed to by any commit, but keep any
+object that any commit ever referenced.
+
+This could be a switch, like --ever.
+
+The implementation would need to walk the history of all branches and check
+all commits. This would tend to be slow. It could look at tags+branches as
+it does now as a first pass, and only do the slow part if there are objects
+not referred to by the tags+branches. And, it could stop looking through
+the whole commit history if there were no more objects to check. Still,
+gonna be slooow. Another optimisation would be to get only the objects
+changed by the commit, and not look at the whole tree as it appeared on
+each commit. --[[Joey]]
diff --git a/doc/walkthrough/unused_data/comment_3_5f973eb7c265015fcd400b6b0bbdf235._comment b/doc/walkthrough/unused_data/comment_3_5f973eb7c265015fcd400b6b0bbdf235._comment
new file mode 100644
index 0000000..dcca0b0
--- /dev/null
+++ b/doc/walkthrough/unused_data/comment_3_5f973eb7c265015fcd400b6b0bbdf235._comment
@@ -0,0 +1,10 @@
+[[!comment format=mdwn
+ username="joey"
+ subject="""comment 3"""
+ date="2014-10-31T20:31:39Z"
+ content="""
+`git-annex unused` looks at what data is used by git branches and tags, but
+not by other commits. It's a reasonable request and I have made a todo for
+it: [[todo/find_unused_in_any_commit]] .. But I am unure if it can be
+implemented to run fast enough to be usable.
+"""]]

sssheeesh
diff --git a/doc/forum/git_annex_sync:_only_git-annex/comment_4_cc3cebf5bc403b490e31e63af964a823._comment b/doc/forum/git_annex_sync:_only_git-annex/comment_4_cc3cebf5bc403b490e31e63af964a823._comment
deleted file mode 100644
index 134ea87..0000000
--- a/doc/forum/git_annex_sync:_only_git-annex/comment_4_cc3cebf5bc403b490e31e63af964a823._comment
+++ /dev/null
@@ -1,12 +0,0 @@
-[[!comment format=mdwn
- username="http://joeyh.name/"
- ip="209.250.56.96"
- subject="comment 4"
- date="2014-10-22T16:18:50Z"
- content="""
-I struggle to see how you could draw that conclusion from what I said.
-
-git-annex will work fine in an existing git repository. You can mix regular git commands like `git add`, `git push`, `git pull`, `git merge` with git-annex commands like `git annex add`, `git annex copy --to origin`, `git annex get`, `git annex merge`, in the same repository.
-
-The `git annex sync` command effcetively runs `git commit; git pull; git annex merge; git push; git annex copy --to origin; git annex get`. If you don't want to run all those commands at once, you don't want to run `git annex sync`. That will not prevent you from using git-annex in any way.
-"""]]
diff --git a/doc/forum/git_annex_sync:_only_git-annex/comment_6_df94154fbbc4edbf7ff658f61bde48b5._comment b/doc/forum/git_annex_sync:_only_git-annex/comment_6_df94154fbbc4edbf7ff658f61bde48b5._comment
new file mode 100644
index 0000000..8772255
--- /dev/null
+++ b/doc/forum/git_annex_sync:_only_git-annex/comment_6_df94154fbbc4edbf7ff658f61bde48b5._comment
@@ -0,0 +1,11 @@
+[[!comment format=mdwn
+ username="joey"
+ subject="""comment 1"""
+ date="2014-10-31T20:25:40Z"
+ content="""
+I have explained clearly in comment #1 above how to do what you want to do,
+using git-annex, so it is a pity if still think that "annex
+can't deliver such a basic functionality". 
+
+It can. I have explained how. I don't know how to explain any better.
+"""]]

comment
diff --git a/doc/forum/What_does___34__disable__47__enable_expiry_after_X_days__34___mean__63__/comment_1_face45c85e4713325bb23bbca7b07502._comment b/doc/forum/What_does___34__disable__47__enable_expiry_after_X_days__34___mean__63__/comment_1_face45c85e4713325bb23bbca7b07502._comment
new file mode 100644
index 0000000..adae186
--- /dev/null
+++ b/doc/forum/What_does___34__disable__47__enable_expiry_after_X_days__34___mean__63__/comment_1_face45c85e4713325bb23bbca7b07502._comment
@@ -0,0 +1,28 @@
+[[!comment format=mdwn
+ username="joey"
+ subject="""comment 1"""
+ date="2014-10-31T20:21:52Z"
+ content="""
+Well, let's see.. You've gone into the Configuration and picked "Unused
+files". The full text in front of you is:
+
+<pre>
+Managing unused files
+
+Old versions of files and deleted files can be preserved inside this repository.
+
+This might be useful, if you ever need to access those old or deleted files. But they'll also use up disk space. There are three ways to deal with this
+
+1. Set up a backup or archive repository, on a removable drive or in the cloud, and the unused files will be moved to it, freeing up space. 
+   [Add a new repository]
+2. Or, you can let unused files expire after a period of time. 
+   [Disable expiry / Enable expiry] after [7] days. [Save changes]
+</pre>
+
+So yes, if I read only item #2, and possibly skip the first sentence of it
+and look at only the "Disable expiry / Enable expiry",
+it seems a litte confusing, possibly, but if I read the 2 paragraphs
+of explaination above it, not so much?
+
+What do you find confusing about this form as a whole?
+"""]]

comment
diff --git a/doc/forum/Deduplication_in_direct_mode/comment_1_cb8eaa8c19f5bb9e145a5e4c8995a8ca._comment b/doc/forum/Deduplication_in_direct_mode/comment_1_cb8eaa8c19f5bb9e145a5e4c8995a8ca._comment
new file mode 100644
index 0000000..63367fc
--- /dev/null
+++ b/doc/forum/Deduplication_in_direct_mode/comment_1_cb8eaa8c19f5bb9e145a5e4c8995a8ca._comment
@@ -0,0 +1,22 @@
+[[!comment format=mdwn
+ username="joey"
+ subject="""comment 1"""
+ date="2014-10-31T20:15:58Z"
+ content="""
+There is really no way to do this.
+
+We could consider hard-linking the files, but then modifying one would
+modify the other, which is likely to be confusing. And, FAT doesn't support
+hard links anyway.
+
+I don't want to complicate git-annex's notion of whether an object is
+present or not with the possibility that it might be present for some
+files but not for others. For example, `git annex get` would then need
+to make a copy of content that was already locally present, while
+currently it knows that if the file is locally present, it has nothing to
+do.
+
+I think that the solution is to use either a better filesystem
+which can support the suprerior indirect mode, or to switch your
+repository to use the WORM backend which does not do deduplication.
+"""]]

Windows: Fix crash when user.name is not set in git config.
diff --git a/Annex/Environment.hs b/Annex/Environment.hs
index 1ddd2b2..ffdd071 100644
--- a/Annex/Environment.hs
+++ b/Annex/Environment.hs
@@ -32,7 +32,7 @@ checkEnvironment = do
 		liftIO checkEnvironmentIO
 
 checkEnvironmentIO :: IO ()
-checkEnvironmentIO = whenM (null <$> myUserGecos) $ do
+checkEnvironmentIO = whenM (isNothing <$> myUserGecos) $ do
 	username <- myUserName
 	ensureEnv "GIT_AUTHOR_NAME" username
 	ensureEnv "GIT_COMMITTER_NAME" username
diff --git a/Utility/UserInfo.hs b/Utility/UserInfo.hs
index b3e191b..1a557c9 100644
--- a/Utility/UserInfo.hs
+++ b/Utility/UserInfo.hs
@@ -40,11 +40,12 @@ myUserName = myVal env userName
 	env = ["USERNAME", "USER", "LOGNAME"]
 #endif
 
-myUserGecos :: IO String
-#ifdef __ANDROID__
-myUserGecos = return "" -- userGecos crashes on Android
+myUserGecos :: IO (Maybe String)
+-- userGecos crashes on Android and is not available on Windows.
+#if defined(__ANDROID__) || defined(mingw32_HOST_OS)
+myUserGecos = return Nothing
 #else
-myUserGecos = myVal [] userGecos
+myUserGecos = Just <$> myVal [] userGecos
 #endif
 
 myVal :: [String] -> (UserEntry -> String) -> IO String
diff --git a/debian/changelog b/debian/changelog
index 8af44b3..efaba2d 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -1,3 +1,9 @@
+git-annex (5.20141025) UNRELEASED; urgency=medium
+
+  * Windows: Fix crash when user.name is not set in git config.
+
+ -- Joey Hess <joeyh@debian.org>  Fri, 31 Oct 2014 16:13:43 -0400
+
 git-annex (5.20141024) unstable; urgency=medium
 
   * vicfg: Deleting configurations now resets to the default, where
diff --git a/doc/bugs/getEffectiveUserID_not_supported_on_Windows.mdwn b/doc/bugs/getEffectiveUserID_not_supported_on_Windows.mdwn
index 458c18b..e8271ff 100644
--- a/doc/bugs/getEffectiveUserID_not_supported_on_Windows.mdwn
+++ b/doc/bugs/getEffectiveUserID_not_supported_on_Windows.mdwn
@@ -20,3 +20,9 @@ Running Windows 7, x64. Also tried running as administrator and in a cmd.exe she
 ### Please provide any additional information below.
 
 The `git annex test` command does work, and all 84 tests passes.
+
+> [[fixed|done]]; I was able to reproduce this bug, and it was crashing
+> trying to look up the geckos username. I don't understand why this worked
+> before; some change exposed this code path on Windows. In any case, I've
+> fixed the crash, and I will be updating the windows builds with this bug
+> fix. --[[Joey]]
diff --git a/doc/bugs/getEffectiveUserID_not_supported_on_Windows/comment_1_26cd277e6bbfcac920ca0a2a47acfcfd._comment b/doc/bugs/getEffectiveUserID_not_supported_on_Windows/comment_1_26cd277e6bbfcac920ca0a2a47acfcfd._comment
deleted file mode 100644
index f941248..0000000
--- a/doc/bugs/getEffectiveUserID_not_supported_on_Windows/comment_1_26cd277e6bbfcac920ca0a2a47acfcfd._comment
+++ /dev/null
@@ -1,17 +0,0 @@
-[[!comment format=mdwn
- username="joey"
- subject="""comment 1"""
- date="2014-10-31T16:57:05Z"
- content="""
-This code path should only be called when USERPROFILE or
-one of USERNAME/USER/LOGNAME is not set. Which should not usually be the case
-when using git-annex on windows.
-
-However, since we know that won't work on Windows it might as well not even
-try.. So I've made it instead print an error that indicates which
-environment variables need to be set.
-
-Can you please download the windows daily build from 
-<http://git-annex.branchable.com/install/windows>, and see what this new,
-better error message says?
-"""]]

commnt
diff --git a/doc/bugs/getEffectiveUserID_not_supported_on_Windows/comment_1_26cd277e6bbfcac920ca0a2a47acfcfd._comment b/doc/bugs/getEffectiveUserID_not_supported_on_Windows/comment_1_26cd277e6bbfcac920ca0a2a47acfcfd._comment
new file mode 100644
index 0000000..f941248
--- /dev/null
+++ b/doc/bugs/getEffectiveUserID_not_supported_on_Windows/comment_1_26cd277e6bbfcac920ca0a2a47acfcfd._comment
@@ -0,0 +1,17 @@
+[[!comment format=mdwn
+ username="joey"
+ subject="""comment 1"""
+ date="2014-10-31T16:57:05Z"
+ content="""
+This code path should only be called when USERPROFILE or
+one of USERNAME/USER/LOGNAME is not set. Which should not usually be the case
+when using git-annex on windows.
+
+However, since we know that won't work on Windows it might as well not even
+try.. So I've made it instead print an error that indicates which
+environment variables need to be set.
+
+Can you please download the windows daily build from 
+<http://git-annex.branchable.com/install/windows>, and see what this new,
+better error message says?
+"""]]

getUserEntryForID does not work on windows
Throw an error instead, mentioning the relevant env vars.
diff --git a/Utility/UserInfo.hs b/Utility/UserInfo.hs
index 617c3e9..b3e191b 100644
--- a/Utility/UserInfo.hs
+++ b/Utility/UserInfo.hs
@@ -48,8 +48,11 @@ myUserGecos = myVal [] userGecos
 #endif
 
 myVal :: [String] -> (UserEntry -> String) -> IO String
-myVal envvars extract = maybe (extract <$> getpwent) return =<< check envvars
+myVal envvars extract = go envvars
   where
-	check [] = return Nothing
-	check (v:vs) = maybe (check vs) (return . Just) =<< getEnv v
-	getpwent = getUserEntryForID =<< getEffectiveUserID
+#ifndef mingw32_HOST_OS
+	go [] = extract <$> (getUserEntryForID =<< getEffectiveUserID)
+#else
+	go [] = error $ "environment not set: " ++ show envvars
+#endif
+	go (v:vs) = maybe (go vs) return =<< getEnv v
diff --git a/doc/bugs/annex_get_fails_from_read-only_filesystem/comment_6_c469f1fe8ae6981a038be7f8723a07b1._comment b/doc/bugs/annex_get_fails_from_read-only_filesystem/comment_6_c469f1fe8ae6981a038be7f8723a07b1._comment
new file mode 100644
index 0000000..fac28c2
--- /dev/null
+++ b/doc/bugs/annex_get_fails_from_read-only_filesystem/comment_6_c469f1fe8ae6981a038be7f8723a07b1._comment
@@ -0,0 +1,7 @@
+[[!comment format=mdwn
+ username="joey"
+ subject="""comment 6"""
+ date="2014-10-31T16:55:47Z"
+ content="""
+An upgrade could move the annexed objects around.
+"""]]

add example multiline data constructor
diff --git a/doc/coding_style.mdwn b/doc/coding_style.mdwn
index 101ac4f..6968c99 100644
--- a/doc/coding_style.mdwn
+++ b/doc/coding_style.mdwn
@@ -72,6 +72,14 @@ that line up with the open and close punctuation.
 		, address = "baz"
 		}
 
+Similarly, data structures line up the leading `=` with the following `|`
+
+	data Foo
+		= Bar
+		| Baz
+		| Quux Foo
+		deriving (Eq, Ord)
+
 Module imports are separated into two blocks, one for third-party modules,
 and one for modules that are part of git-annex. (Additional blocks can be used
 if it makes sense.)

better organization and a few wording tweaks
diff --git a/doc/internals.mdwn b/doc/internals.mdwn
index 71d1b03..ca2b7b4 100644
--- a/doc/internals.mdwn
+++ b/doc/internals.mdwn
@@ -2,7 +2,9 @@ In the world of git, we're not scared about internal implementation
 details, and sometimes we like to dive in and tweak things by hand. Here's
 some documentation to that end.
 
-## `.git/annex/objects/aa/bb/*/*`
+## The .git/ directory
+
+### `.git/annex/objects/aa/bb/*/*`
 
 This is where locally available file contents are actually stored.
 Files added to the annex get a symlink checked into git that points
@@ -27,11 +29,11 @@ Also in [[direct_mode]], some additional data is stored in these directories.
 changed, and `.map` files contain a list of file(s) in the work directory
 that contain the key.
 
-# `.git/annex/tmp/`
+### `.git/annex/tmp/`
 
 This directory contains partially transferred objects.
 
-# `.git/annex/misctmp/`
+### `.git/annex/misctmp/`
 
 This is a temp directory for miscellaneous other temp files.
 
@@ -39,26 +41,26 @@ While .git/annex/objects and .git/annex/tmp can be put on different
 filesystems if desired, .git/annex/misctmp 
 has to be on the same filesystem as the work tree and git repository.
 
-# `.git/annex/bad/`
+### `.git/annex/bad/`
 
 git-annex fsck puts any bad objects it finds in here.
 
-# `.git/annex/transfers/`
+### `.git/annex/transfers/`
 
 Contains information files for uploads and downloads that are in progress,
 as well as any that have failed. Used especially by the assistant.
 It is safe to delete these files.
 
-# `.git/annex/ssh/`
+### `.git/annex/ssh/`
 
 ssh connection caching files are written in here.
 
-# `.git/annex/index`
+### `.git/annex/index`
 
-This is a git index file which git-annex uses for commits to the git-annex
-branch.
+This is a git index file which git-annex uses to stage files
+when preparing commits to the git-annex branch. 
 
-# `.git/annex/journal/`
+### `.git/annex/journal/`
 
 git-annex uses this to journal changes to the git-annex branch,
 before committing a set of changes.
@@ -67,13 +69,9 @@ before committing a set of changes.
 
 This branch is managed by git-annex, with the contents listed below.
 
-The file `.git/annex/index` is a separate git index file it uses
-to accumulate changes for the git-annex branch.
-Also, `.git/annex/journal/` is used to record changes before they
-are added to git.
-
-This branch operates on objects exclusively. No file names will ever
-be stored in this branch.
+This branch is not connected to your master, etc branches. It it used for
+internal tracking of information about git-annex repositories and annexed
+objects.
 
 The files stored in this branch are all designed to be auto-merged
 using git's [[union merge driver|git-union-merge]]. So each line

Added a comment: Re: why this happened
diff --git a/doc/bugs/annex_get_fails_from_read-only_filesystem/comment_5_07f612d7059a9b561c48d63e471d5ed7._comment b/doc/bugs/annex_get_fails_from_read-only_filesystem/comment_5_07f612d7059a9b561c48d63e471d5ed7._comment
new file mode 100644
index 0000000..24b7dd1
--- /dev/null
+++ b/doc/bugs/annex_get_fails_from_read-only_filesystem/comment_5_07f612d7059a9b561c48d63e471d5ed7._comment
@@ -0,0 +1,10 @@
+[[!comment format=mdwn
+ username="http://jaen.saul.ee/id/"
+ nickname="Jaen"
+ subject="Re: why this happened"
+ date="2014-10-30T19:04:56Z"
+ content="""
+I agree that at least read-only support should be there. This error was from an filesystem type that is impossible to mount read-write.
+
+Now that I am looking at it again with fresh eyes, I suppose it's possible to get around this by mounting an union filesystem with a read-write temp layer on top of the read-only one (not that a regular user would ever figure that out...)
+"""]]

Added a comment
diff --git a/doc/bugs/flooding_me_with_ssh_password_prompts/comment_1_dba769cf0fca540f50f5e4b732a7e353._comment b/doc/bugs/flooding_me_with_ssh_password_prompts/comment_1_dba769cf0fca540f50f5e4b732a7e353._comment
new file mode 100644
index 0000000..1cfa876
--- /dev/null
+++ b/doc/bugs/flooding_me_with_ssh_password_prompts/comment_1_dba769cf0fca540f50f5e4b732a7e353._comment
@@ -0,0 +1,14 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawmBUR4O9mofxVbpb8JV9mEbVfIYv670uJo"
+ nickname="Justin"
+ subject="comment 1"
+ date="2014-10-30T18:07:28Z"
+ content="""
+I've ran into this as well using wheezy+awesome.  It definitely looks like a race condition, I ended up doing a 
+
+    killall git-annex
+    ssh-add
+    git-annex webapp
+
+to get things going again.
+"""]]

Added a comment
diff --git a/doc/bugs/annex_get_fails_from_read-only_filesystem/comment_4_2491fabe2eb7a14bfef0e388b4b9c4c7._comment b/doc/bugs/annex_get_fails_from_read-only_filesystem/comment_4_2491fabe2eb7a14bfef0e388b4b9c4c7._comment
new file mode 100644
index 0000000..8543aaa
--- /dev/null
+++ b/doc/bugs/annex_get_fails_from_read-only_filesystem/comment_4_2491fabe2eb7a14bfef0e388b4b9c4c7._comment
@@ -0,0 +1,10 @@
+[[!comment format=mdwn
+ username="anarcat"
+ ip="70.83.139.100"
+ subject="comment 4"
+ date="2014-10-30T15:22:32Z"
+ content="""
+the problem here is that it upgrading the repo will not work on a readonly filesystem, so we can't upgrade, we can't get files, so we can't sync.
+
+we should be able to sync anyways - can't we try our best shot at getting files even without upgrading the metadata? i mean i'm looking for something in .git/annex/objects/, maybe i don't care about tracking so much - i just want to recover some files... 
+"""]]

Added a comment
diff --git a/doc/todo/show_readonly_removable_drives_in_the_webapp/comment_2_b9236ea884a2934dd0c8e511a80f4fda._comment b/doc/todo/show_readonly_removable_drives_in_the_webapp/comment_2_b9236ea884a2934dd0c8e511a80f4fda._comment
new file mode 100644
index 0000000..9aa4c17
--- /dev/null
+++ b/doc/todo/show_readonly_removable_drives_in_the_webapp/comment_2_b9236ea884a2934dd0c8e511a80f4fda._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="anarcat"
+ ip="70.83.139.100"
+ subject="comment 2"
+ date="2014-10-30T15:15:57Z"
+ content="""
+yep, that would be fine.
+"""]]

add more information
diff --git a/doc/bugs/flooding_me_with_ssh_password_prompts.mdwn b/doc/bugs/flooding_me_with_ssh_password_prompts.mdwn
index 6e6be07..191ad02 100644
--- a/doc/bugs/flooding_me_with_ssh_password_prompts.mdwn
+++ b/doc/bugs/flooding_me_with_ssh_password_prompts.mdwn
@@ -25,6 +25,14 @@ Still, when a situation like this occurs, it seems to me that it should generate
 
 Doesn't git-annex deploy its own ssh keys once it has established a connexion with an SSH remote?
 
+> After more investigation, it turns out this peculiar git-annex daemon was some left-overs from a previous session i had logged out of. It is unclear why git-annex was still running, but there were also pulseaudio and redshift programs lying around so I suspect it wasn't git-annex specific.
+>
+> However, this problem remains on login. When I start a new session, there's a race condition between git-annex asking passwords and ssh-add asking me to unlock my private key. It's a nice festival of password prompts as I struggle to type in my ssh key faster than git-annex asks me for the remote host's password.
+> 
+> In general, I think git-annex should set `PasswordAuthentication=no` (or allow me to configure it as such), especially if it knows it was able to login without a password at some point. It should especially do that if there's no UI attached informing the user it will be prompting for a password. `NumberOfPasswordPrompts=1` would also be a welcome improvement, but I really don't think I should be seeing those password prompts, especially since I *can* login to the server with my existing SSH key.
+>
+> Also note that I use Monkeysphere to input my private key into the SSH agent so it could explain why this doesn't usually happen to other people: Monkeysphere doesn't automatically get started from `ssh` if the key is missing, and instead `ssh` will revert to a regular password-based authentication which competes with the Monkeysphere password prompt.
+
 ### What steps will reproduce the problem?
 
 It's unclear - i guess you need to setup git-annex to autostart and sync with remote ssh annexes. You may also need to have to use XFCE with Awesome to reproduce the problem. I can provide more details on my session setup on request. --[[anarcat]]

weird multiple password prompts problem
diff --git a/doc/bugs/flooding_me_with_ssh_password_prompts.mdwn b/doc/bugs/flooding_me_with_ssh_password_prompts.mdwn
new file mode 100644
index 0000000..6e6be07
--- /dev/null
+++ b/doc/bugs/flooding_me_with_ssh_password_prompts.mdwn
@@ -0,0 +1,34 @@
+### Please describe the problem.
+
+When I login to my session, git-annex starts a few daemons, which is fine, but then it prompts me for tons of passwords, which is really annoying.
+
+It is strange because one of the things I do when I start my session is to input my keys in the SSH agent. But then git-annex still prompts me:
+
+~~~~
+21503 ?        Sl     3:04 git-annex assistant --startdelay=5s
+21517 ?        S      0:03  \_ git --git-dir=/srv/musique/anarcat/books/.git --work-tree=/srv/musique/anarcat/books cat-file --batch
+21612 ?        SNl    0:00  \_ git-annex remotedaemon
+21706 ?        S      0:00  \_ git --git-dir=/srv/musique/anarcat/books/.git --work-tree=/srv/musique/anarcat/books check-ignore -z --stdin --verbose --non-matching
+21898 ?        SN     0:00  \_ git --git-dir=/srv/musique/anarcat/books/.git --work-tree=/srv/musique/anarcat/books check-attr -z --stdin annex.backend annex.numcopies --
+ 6712 ?        SNl    0:00  \_ git-annex transferkeys
+ 6719 ?        SN     0:00      \_ git --git-dir=/srv/musique/anarcat/books/.git --work-tree=/srv/musique/anarcat/books cat-file --batch
+ 6720 ?        SN     0:00      \_ rsync --progress --inplace --perms -e 'ssh' '-S' '.git/annex/ssh/anarc.at' '-o' 'ControlMaster=auto' '-o' 'ControlPersist=yes' '-T' 'anarc.at' 'git-annex-shell ''sendkey'' ''/srv/books'' ''SHA256E-s17781587--f204e6ef1f14b624e222d6ad73ed41edf65c29c93afad9a1e4e1954ad68d1753.pdf'' --uuid a75cbbf7-e055-423e-b375-443e0552c9e2 ''--'' ''remoteuuid=aa500f29-42d9-4777-ae02-4a2c3d47db44'' ''direct='' ''associatedfile=Garde cotiere canadienne/Navigation dans les glaces en eaux Canadiennes (1112)/Navigation dans les glaces en eaux Canadie - Garde cotiere canadienne.pdf'' ''--''' -- dummy: /srv/musique/anarcat/books/.git/annex/tmp/SHA256E-s17781587--f204e6ef1f14b624e222d6ad73ed41edf65c29c93afad9a1e4e1954ad68d1753.pdf
+ 6721 ?        SN     0:00          \_ ssh -S .git/annex/ssh/anarc.at -o ControlMaster=auto -o ControlPersist=yes -T anarc.at git-annex-shell 'sendkey' '/srv/books' 'SHA256E-s17781587--f204e6ef1f14b624e222d6ad73ed41edf65c29c93afad9a1e4e1954ad68d1753.pdf' --uuid a75cbbf7-e055-423e-b375-443e0552c9e2 '--' 'remoteuuid=aa500f29-42d9-4777-ae02-4a2c3d47db44' 'direct=' 'associatedfile=Garde cotiere canadienne/Navigation dans les glaces en eaux Canadiennes (1112)/Navigation dans les glaces en eaux Canadie - Garde cotiere canadienne.pdf' '--' dummy rsync --server --sender -vpe.Lsf --inplace .
+ 6722 ?        SN     0:00              \_ /usr/bin/ssh-askpass anarcat@anarc.at's password:
+~~~~
+
+Yet I can login to `shell.anarc.at` without a passphrase without problems.
+
+Interestingly enough, my main session and git-annex do not seem to share the same `SSH_AGENT` environment variable. It's unclear to me why. git-annex's SSH_AGENT environment variable seems to refer to a process that disappeared, actually. So it could be there's something wrong with my session.
+
+Still, when a situation like this occurs, it seems to me that it should generate in this noisy concert of ssh prompts that basically blocks all work until i hit "escape" often enough. In fact, that it is rather problematic to have random password prompts show up like this without an explanation: git-annex should tell me it's the source of this password prompt or not prompt at all, because there's no way i'll start entering random passphrases into random pinentry dialogs that show up... 
+
+Doesn't git-annex deploy its own ssh keys once it has established a connexion with an SSH remote?
+
+### What steps will reproduce the problem?
+
+It's unclear - i guess you need to setup git-annex to autostart and sync with remote ssh annexes. You may also need to have to use XFCE with Awesome to reproduce the problem. I can provide more details on my session setup on request. --[[anarcat]]
+
+### What version of git-annex are you using? On what operating system?
+
+5.20140927~bpo70+3 on debian wheezy.

diff --git a/doc/bugs/getEffectiveUserID_not_supported_on_Windows.mdwn b/doc/bugs/getEffectiveUserID_not_supported_on_Windows.mdwn
index c3d123f..458c18b 100644
--- a/doc/bugs/getEffectiveUserID_not_supported_on_Windows.mdwn
+++ b/doc/bugs/getEffectiveUserID_not_supported_on_Windows.mdwn
@@ -8,15 +8,15 @@ After a clean install of the latest git-annex for Windows (https://downloads.kit
     git init
     git annex init
 
-Running for example ´git annex version´ or ´git annex info´ gives the same error message.
+Running for example `git annex version` or `git annex info` gives the same error message.
 
 
 ### What version of git-annex are you using? On what operating system?
 
-git-annex version should be 5.20141024, but the installer does not specify version and ´git annex info´ does not work, so it is hard to tell for sure.
+git-annex version should be 5.20141024, but the installer does not specify version and `git annex info` does not work, so it is hard to tell for sure.
 Running Windows 7, x64. Also tried running as administrator and in a cmd.exe shell as well as Powershell.
 
 
 ### Please provide any additional information below.
 
-The ´git annex test´ command does work, and all 84 tests passes.
+The `git annex test` command does work, and all 84 tests passes.

diff --git a/doc/bugs/getEffectiveUserID_not_supported_on_Windows.mdwn b/doc/bugs/getEffectiveUserID_not_supported_on_Windows.mdwn
new file mode 100644
index 0000000..c3d123f
--- /dev/null
+++ b/doc/bugs/getEffectiveUserID_not_supported_on_Windows.mdwn
@@ -0,0 +1,22 @@
+### Please describe the problem.
+After a clean install of the latest git-annex for Windows (https://downloads.kitenet.net/git-annex/windows/current/), most git-annex commands fail with the following error message:
+    
+    git-annex: System.PosixCompat.User.getEffectiveUserID: not supported: illegal operation
+
+### What steps will reproduce the problem?
+
+    git init
+    git annex init
+
+Running for example ´git annex version´ or ´git annex info´ gives the same error message.
+
+
+### What version of git-annex are you using? On what operating system?
+
+git-annex version should be 5.20141024, but the installer does not specify version and ´git annex info´ does not work, so it is hard to tell for sure.
+Running Windows 7, x64. Also tried running as administrator and in a cmd.exe shell as well as Powershell.
+
+
+### Please provide any additional information below.
+
+The ´git annex test´ command does work, and all 84 tests passes.

thoughts
diff --git a/doc/todo/direct_mode_undo.mdwn b/doc/todo/direct_mode_undo.mdwn
new file mode 100644
index 0000000..969678d
--- /dev/null
+++ b/doc/todo/direct_mode_undo.mdwn
@@ -0,0 +1,76 @@
+A fairly common request is that a repo is using direct mode, and the user
+has made some change, and now wants to undo it. Since direct mode doesn't
+allow using `git revert`, the repo would need to be switched to indirect
+mode first, which can range from annoying to really annoying to impossible
+(on eg FAT).
+
+## general approach
+
+`git annex foo $gitcmd` could:
+
+1. check out a local clone of the repo
+2. run "git $gitcmd" inside the cline
+3. merge any changes from the clone back into the direct mode repo
+   and update the work tree the same as is done by `git annex merge`.
+
+This is a general bypass for the direct mode guard. It should work anywhere
+(even on FAT). It avoids problems like `git commit -a` being unsafe in
+direct mode, since running such a command in a local clone, which does not
+use direct mode is always safe.
+
+One problem with it is that it can only operate on changes that have been
+committed. If you've just accidentially deleted a file and want to undo
+that, and haven't run `git annex sync` to commit it, you can't revert it.
+
+Also, while this is general, I don't know if the generality is useful.
+What other changes, than revert, would it make sense to do with such a
+command? It could be used to check out some other branch, but step 3 above
+would merge that branch back into the direct mode repo.
+
+## git annex undo
+
+I don't want to recapitulate all of the git commands in git-annex for
+direct mode. So I don't want to add `git annex revert` and `git annex
+branch` etc, etc.
+
+So, adding `git annex undo` feels like a step down a slippery slope. But it
+might be justified as providing just enough functionality to make direct
+mode a lot more useful, without trying to recapitulate all the flexability 
+of git. Like `git annex merge` and `git annex sync` also do.
+
+Another use case is binding `git annex undo $file` to an action in a file
+manager.
+
+Here's a design for undo:
+
+1. Can be passed one or more files. Which may or may not exist in the work tree.
+2. First, commits the current state of the files as staged in the index,
+   or in the working tree. This may involve checksumming modified files.
+3. Then, for each file, looks back through git history, to find the commit
+   just before the most recent change that was made to that file.
+   Stage the version of the file as it was in that commit.
+4. Updates work tree, and leaves the changes staged
+   but not committed. (To allow the user to bundle up multiple undos in a
+   single commit).
+6. Does not get or drop content. The content may even be completely
+   missing after an undo.
+
+Note that undoing an undo should get back to the original state. This is
+why #2 commits changes first. This way, if a file has a staged change,
+it gets committed, and then that commit is reverted, resulting in another
+commit. Which a later run of undo can in turn revert. If it didn't commit,
+the history about the staged change that was reverted would be lost.
+
+What about undoing changes to a whole directory? It first would
+need to look through the git history to find every file under that
+directory. And then it would behave as if it were passed all those
+files. This would be useful for reverting `rm -rf`. But it could be very
+expensive. And it could lead to surprising results, like undoing a lot
+of unrelated changes when running on a bunch of files in a directory
+that were changed at different times.
+
+Maybe instead of letting a directory be passed, make undo with no
+parameters revert all changes made in the most recent commit.
+
+Also, --depth could make undo look for an older commit than the most
+recent one to affect the specified file.

Added a comment
diff --git a/doc/forum/git_annex_sync:_only_git-annex/comment_5_52010f21a15d76d68986aa1fba29aaf1._comment b/doc/forum/git_annex_sync:_only_git-annex/comment_5_52010f21a15d76d68986aa1fba29aaf1._comment
new file mode 100644
index 0000000..cee2a9b
--- /dev/null
+++ b/doc/forum/git_annex_sync:_only_git-annex/comment_5_52010f21a15d76d68986aa1fba29aaf1._comment
@@ -0,0 +1,10 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawlog_5wIICaMcrKTexlFNA6IO6UTp323aE"
+ nickname="Torkaly"
+ subject="comment 5"
+ date="2014-10-29T18:51:29Z"
+ content="""
+Hi,
+
+thank you for your response. I just want to control my branches (master, dev and so on ...) by myself, without sync/master or sync/dev and without merging it automatically. But the git-annex branch should be populated between the repositories \"magically\" (some kind of \"git annex syncannex\"). As annex can't deliver such a basic functionality i assumed, that it was not designed to work with existing \"real\" git repositories.
+"""]]

diff --git a/doc/forum/What_does___34__disable__47__enable_expiry_after_X_days__34___mean__63__.mdwn b/doc/forum/What_does___34__disable__47__enable_expiry_after_X_days__34___mean__63__.mdwn
new file mode 100644
index 0000000..e95e27a
--- /dev/null
+++ b/doc/forum/What_does___34__disable__47__enable_expiry_after_X_days__34___mean__63__.mdwn
@@ -0,0 +1 @@
+Git-annex assistant configuration has an item saying "disable/enable expiry after X days".  What does it mean?  Am I the only one confused by this?

devblog
diff --git a/doc/devblog/day_229__S3_multipart.mdwn b/doc/devblog/day_229__S3_multipart.mdwn
new file mode 100644
index 0000000..caccda0
--- /dev/null
+++ b/doc/devblog/day_229__S3_multipart.mdwn
@@ -0,0 +1,11 @@
+Some progress on the [[bugs/S3_upload_not_using_multipart]] bug. The aws
+library now includes the multipart API. However, when I dug into it, it
+looks like the API needs some changes to get the ETAG of each uploaded
+part. Once that's fixed, git-annex should be able to support S3 multipart
+uploads, although I think that git-annex's own chunking is better in most
+situations -- it supports resuming uploads and downloads better. The main
+use case for S3 multipart seems to be using git-annex to publish large
+files.
+
+Also, managed to get the backlog down from 100 to just 65 messages,
+including catching up on quite old parts of backlog.

comment
diff --git a/doc/forum/How_to_get_detailed_information_on_special_remotes__63__/comment_1_f1eca38ca0c1edb66e64ac64f0321829._comment b/doc/forum/How_to_get_detailed_information_on_special_remotes__63__/comment_1_f1eca38ca0c1edb66e64ac64f0321829._comment
new file mode 100644
index 0000000..84b67f7
--- /dev/null
+++ b/doc/forum/How_to_get_detailed_information_on_special_remotes__63__/comment_1_f1eca38ca0c1edb66e64ac64f0321829._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="joey"
+ subject="""comment 1"""
+ date="2014-10-28T20:39:41Z"
+ content="""
+The latest version of git-annex adds the ability to `git annex info
+$remote` and get all the info you asked for. Enjoy!
+"""]]

comment
diff --git a/doc/forum/Central_git_annex_server_that_always_keeps_one_copy/comment_2_b0a091e11c18c8640888b0aedfbff5c5._comment b/doc/forum/Central_git_annex_server_that_always_keeps_one_copy/comment_2_b0a091e11c18c8640888b0aedfbff5c5._comment
new file mode 100644
index 0000000..35778ad
--- /dev/null
+++ b/doc/forum/Central_git_annex_server_that_always_keeps_one_copy/comment_2_b0a091e11c18c8640888b0aedfbff5c5._comment
@@ -0,0 +1,19 @@
+[[!comment format=mdwn
+ username="joey"
+ subject="""comment 2"""
+ date="2014-10-28T20:28:26Z"
+ content="""
+If you configure the central repository to be in the "full backup" group,
+then the assistant and `git annex sync --content` etc will send the
+contents of all files to it, and never remove the contents of files from
+it.
+
+This doesn't prevent someone manually running `git annex drop --from
+$centralrepo --force`, or similar. But then, nothing prevents users from
+using git to push annexed files to the central repo, and never sending the
+contents of the files along to it.
+
+It would be possible to make `git-annex-shell` have a config setting that
+would prevent ever dropping keys. But I'd like to talk about this use case
+more, to make sure that really makes sense.
+"""]]

comment
diff --git a/doc/forum/Ssh_remote_on_NAS/comment_5_07348ed61ccdd93417365f1525a05bf2._comment b/doc/forum/Ssh_remote_on_NAS/comment_5_07348ed61ccdd93417365f1525a05bf2._comment
new file mode 100644
index 0000000..c8e6312
--- /dev/null
+++ b/doc/forum/Ssh_remote_on_NAS/comment_5_07348ed61ccdd93417365f1525a05bf2._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="joey"
+ subject="""comment 5"""
+ date="2014-10-28T20:26:08Z"
+ content="""
+git-upload-pack is a git command, which is not present in PATH
+on your NAS when git sshes in and tries to run it. 
+"""]]

comment
diff --git a/doc/forum/Standard_groups__47__preferred_contents/comment_7_413593ea0663874196305c9eb602e7c4._comment b/doc/forum/Standard_groups__47__preferred_contents/comment_7_413593ea0663874196305c9eb602e7c4._comment
new file mode 100644
index 0000000..32bfa6b
--- /dev/null
+++ b/doc/forum/Standard_groups__47__preferred_contents/comment_7_413593ea0663874196305c9eb602e7c4._comment
@@ -0,0 +1,7 @@
+[[!comment format=mdwn
+ username="joey"
+ subject="""comment 7"""
+ date="2014-10-28T20:23:55Z"
+ content="""
+See [[bugs/present_files__47__directories_are_dropped_after_a_sync]]
+"""]]

comment
diff --git a/doc/forum/Restricting_SSH_+_supply_key/comment_11_3b946519c9f52569ce60ac04bdc3380a._comment b/doc/forum/Restricting_SSH_+_supply_key/comment_11_3b946519c9f52569ce60ac04bdc3380a._comment
new file mode 100644
index 0000000..6283053
--- /dev/null
+++ b/doc/forum/Restricting_SSH_+_supply_key/comment_11_3b946519c9f52569ce60ac04bdc3380a._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="joey"
+ subject="""fixed"""
+ date="2014-10-28T20:19:04Z"
+ content="""
+I seem to have forgotten to follow up here, but I think I fixed
+this problem some time ago, in [[!commit 5afc8b28e03f4d242fa81a9a93384714d12d4e5c]].
+"""]]

close
diff --git a/doc/bugs/problems_with_enableremote_on_gcrypt_remote___40__hosted_with_gitolite__41__.mdwn b/doc/bugs/problems_with_enableremote_on_gcrypt_remote___40__hosted_with_gitolite__41__.mdwn
index 5dcf732..4d6e041 100644
--- a/doc/bugs/problems_with_enableremote_on_gcrypt_remote___40__hosted_with_gitolite__41__.mdwn
+++ b/doc/bugs/problems_with_enableremote_on_gcrypt_remote___40__hosted_with_gitolite__41__.mdwn
@@ -103,3 +103,5 @@ git-annex: uuid mismatch (UUID "78104a6f-16a9-504b-8e8a-d8a3c59351e8",Just (UUID
 
 # End of transcript or log.
 """]]
+
+> [[done]]; see comments. --[[Joey]]

improve uuid mismatch message
diff --git a/Remote/GCrypt.hs b/Remote/GCrypt.hs
index 995c3e8..9aa70d5 100644
--- a/Remote/GCrypt.hs
+++ b/Remote/GCrypt.hs
@@ -202,7 +202,7 @@ gCryptSetup mu _ c = go $ M.lookup "gitrepo" c
 						method <- setupRepo gcryptid =<< inRepo (Git.Construct.fromRemoteLocation gitrepo)
 						gitConfigSpecialRemote u c' "gcrypt" (fromAccessMethod method)
 						return (c', u)
-					else error $ "uuid mismatch " ++ show (u, mu, gcryptid)
+					else error $ "uuid mismatch; expected " ++ show mu ++ " but remote gitrepo has " ++ show u ++ " (" ++ show gcryptid ++ ")"
 
 {- Sets up the gcrypt repository. The repository is either a local
  - repo, or it is accessed via rsync directly, or it is accessed over ssh
diff --git a/doc/bugs/problems_with_enableremote_on_gcrypt_remote___40__hosted_with_gitolite__41__/comment_2_1bb55c9a35d9447a31237c8bfa24dba9._comment b/doc/bugs/problems_with_enableremote_on_gcrypt_remote___40__hosted_with_gitolite__41__/comment_2_1bb55c9a35d9447a31237c8bfa24dba9._comment
new file mode 100644
index 0000000..c26b0a3
--- /dev/null
+++ b/doc/bugs/problems_with_enableremote_on_gcrypt_remote___40__hosted_with_gitolite__41__/comment_2_1bb55c9a35d9447a31237c8bfa24dba9._comment
@@ -0,0 +1,21 @@
+[[!comment format=mdwn
+ username="joey"
+ subject="""comment 2"""
+ date="2014-10-28T19:40:37Z"
+ content="""
+The uuid mismatch message tells me that you have tried to enable a special
+remote that has uuid 984e0333-3327-5f21-87a1-35d30f37f337. However, when
+it checked the gcrypt repository, it found that it had gcrypt id
+":id:8sucFsBZIGQKXFv5ecSW", which means its uuid should be
+78104a6f-16a9-504b-8e8a-d8a3c59351e8. I have improved that message to be
+more clear.
+
+Since `git annex info` doesn't list that
+78104a6f-16a9-504b-8e8a-d8a3c59351e8 uuid at all, it seems that
+this gcrypt repository has not been initialized using `git-annex
+initremote`. It's not a gcrypt special remote, but instead is a gcrypt
+repository, that was probably created using `git push`. You can convert it
+to a gcrypt special remote by running `git-annex initremote` and providing
+its repourl. Once that's done and pushed, you will be able to `git annex
+enableremote` it elsewhere.
+"""]]

comment
diff --git a/doc/forum/Copy_contents_of_directory_to_rsync_remotes_possible__63__/comment_1_6a598b2a0fc6c241aa051f663dca9842._comment b/doc/forum/Copy_contents_of_directory_to_rsync_remotes_possible__63__/comment_1_6a598b2a0fc6c241aa051f663dca9842._comment
new file mode 100644
index 0000000..6e41866
--- /dev/null
+++ b/doc/forum/Copy_contents_of_directory_to_rsync_remotes_possible__63__/comment_1_6a598b2a0fc6c241aa051f663dca9842._comment
@@ -0,0 +1,11 @@
+[[!comment format=mdwn
+ username="joey"
+ subject="""comment 1"""
+ date="2014-10-28T19:26:01Z"
+ content="""
+git-annex has to tell rsync to transfer the "24863" directory,
+otherwise rsync would not create that directory, and would then
+fail to create "24863/2fe" since its parent directory doesn't exist.
+
+Might be able to use use ACLS, I suppose, but they bring a lot of complexity.
+"""]]

comment
diff --git a/doc/forum/Recovering_deleted_file_in_direct_mode/comment_1_a3e6fc93669ec76656c84793d1f59149._comment b/doc/forum/Recovering_deleted_file_in_direct_mode/comment_1_a3e6fc93669ec76656c84793d1f59149._comment
new file mode 100644
index 0000000..0b23bbc
--- /dev/null
+++ b/doc/forum/Recovering_deleted_file_in_direct_mode/comment_1_a3e6fc93669ec76656c84793d1f59149._comment
@@ -0,0 +1,11 @@
+[[!comment format=mdwn
+ username="joey"
+ subject="""comment 1"""
+ date="2014-10-28T19:22:54Z"
+ content="""
+> the probability of something going wrong during the conversion is quite high (see other bugs reported during import)
+
+I don't know what bugs you speak of. If the probability of something going
+wrong is quite high, then you must have a reproducible test case. Submit a
+bug with such a test case, and I can fix it.
+"""]]

this TODO item is obsolete; S3 supports chunking and there's a different bug to support S3 multipart uploads
diff --git a/doc/todo/support_S3_multipart_uploads.mdwn b/doc/todo/support_S3_multipart_uploads.mdwn
deleted file mode 100644
index 711ac41..0000000
--- a/doc/todo/support_S3_multipart_uploads.mdwn
+++ /dev/null
@@ -1,14 +0,0 @@
-Did not know of this when I wrote S3 support. Ability to resume large
-uploads would be good.
-
-<http://aws.typepad.com/aws/2010/11/amazon-s3-multipart-upload.html>
-
-Also allows supporting files > 5 gb, a S3 limit I was not aware of.
-
-NB: It would work just as well to split the object and upload the N parts
-to S3, but not bother with S3's paperwork to rejoin them into one object. 
-Only reasons not to do that are a) backwards compatability with 
-the existing S3 remote and b) this would not allow accessing the content
-in S3 w/o using git-annex, which could be useful in some scenarios.
-
---[[Joey]]

WIP branch
diff --git a/doc/bugs/S3_upload_not_using_multipart/comment_9_1f5578a9100f0f087a558e5e5968d753._comment b/doc/bugs/S3_upload_not_using_multipart/comment_9_1f5578a9100f0f087a558e5e5968d753._comment
new file mode 100644
index 0000000..10cab3d
--- /dev/null
+++ b/doc/bugs/S3_upload_not_using_multipart/comment_9_1f5578a9100f0f087a558e5e5968d753._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="joey"
+ subject="""comment 9"""
+ date="2014-10-28T18:25:04Z"
+ content="""
+I have a WIP branch `aws-s3-multipart`. I stopped when I got blocked
+by a bad API in the aws library: <https://github.com/aristidb/aws/issues/141>
+"""]]

diff --git a/doc/bugs/rsync_fails_with_sync_error:_syntax_or_usage_error_.mdwn b/doc/bugs/rsync_fails_with_sync_error:_syntax_or_usage_error_.mdwn
new file mode 100644
index 0000000..09c79d7
--- /dev/null
+++ b/doc/bugs/rsync_fails_with_sync_error:_syntax_or_usage_error_.mdwn
@@ -0,0 +1,85 @@
+### Please describe the problem.
+
+i tried to sync my home music annex to a server. Half the files worked nicely, but on the rest it fails with rsync errors.
+
+### What steps will reproduce the problem?
+
+git annex -d sync --content
+
+### What version of git-annex are you using? On what operating system?
+
+Client:
+
+ubuntu trusty
+Version: 5.20140517.4
+
+Server:
+
+ubuntu trusty
+Version: 5.20140412ubuntu1
+
+
+### Please provide any additional information below.
+
+[[!format sh """
+dirus-dom:/music$ git annex -d sync --content
+[2014-10-28 19:18:28 CET] read: git ["--git-dir=/exports/music/.git","--work-tree=/exports/music","show-ref","git-annex"]
+[2014-10-28 19:18:28 CET] read: git ["--git-dir=/exports/music/.git","--work-tree=/exports/music","show-ref","--hash","refs/heads/git-annex"]
+[2014-10-28 19:18:29 CET] read: git ["--git-dir=/exports/music/.git","--work-tree=/exports/music","log","refs/heads/git-annex..1599d29eba7a0ec50217c2b4a3f4cc1ecc8b2116","--oneline","-n1"]
+[2014-10-28 19:18:29 CET] read: git ["--git-dir=/exports/music/.git","--work-tree=/exports/music","log","refs/heads/git-annex..27b47301dcb5007705d1dcd5a414df964b840467","--oneline","-n1"]
+[2014-10-28 19:18:29 CET] read: git ["--git-dir=/exports/music/.git","--work-tree=/exports/music","log","refs/heads/git-annex..a95ca0282fefcd774ec8a00b6f33c11f08f789d8","--oneline","-n1"]
+[2014-10-28 19:18:29 CET] chat: git ["--git-dir=/exports/music/.git","--work-tree=/exports/music","cat-file","--batch"]
+commit  [2014-10-28 19:18:29 CET] read: git ["--git-dir=/exports/music/.git","--work-tree=/exports/music","commit","-a","-m","git-annex automatic sync"]
+ok
+[2014-10-28 19:18:31 CET] read: git ["--git-dir=/exports/music/.git","--work-tree=/exports/music","symbolic-ref","HEAD"]
+[2014-10-28 19:18:31 CET] read: git ["--git-dir=/exports/music/.git","--work-tree=/exports/music","show-ref","refs/heads/master"]
+[2014-10-28 19:18:31 CET] call: git ["--git-dir=/exports/music/.git","--work-tree=/exports/music","show-ref","--verify","-q","refs/heads/synced/master"]
+[2014-10-28 19:18:31 CET] read: git ["--git-dir=/exports/music/.git","--work-tree=/exports/music","log","refs/heads/master..refs/heads/synced/master","--oneline","-n1"]
+pull sync.poelzi.org__music
+[2014-10-28 19:18:31 CET] read: ssh ["-O","stop","-S","poelzigit@sync.poelzi.org","-o","ControlMaster=auto","-o","ControlPersist=yes","localhost"]
+[2014-10-28 19:18:31 CET] call: git ["--git-dir=/exports/music/.git","--work-tree=/exports/music","fetch","sync.poelzi.org__music"]
+[2014-10-28 19:18:33 CET] call: git ["--git-dir=/exports/music/.git","--work-tree=/exports/music","show-ref","--verify","-q","refs/remotes/sync.poelzi.org__music/master"]
+[2014-10-28 19:18:33 CET] read: git ["--git-dir=/exports/music/.git","--work-tree=/exports/music","log","refs/heads/master..refs/remotes/sync.poelzi.org__music/master","--oneline","-n1"]
+[2014-10-28 19:18:33 CET] call: git ["--git-dir=/exports/music/.git","--work-tree=/exports/music","show-ref","--verify","-q","refs/remotes/sync.poelzi.org__music/synced/master"]
+[2014-10-28 19:18:33 CET] read: git ["--git-dir=/exports/music/.git","--work-tree=/exports/music","log","refs/heads/synced/master..refs/remotes/sync.poelzi.org__music/synced/master","--oneline","-n1"]
+ok
+[2014-10-28 19:18:33 CET] read: git ["--git-dir=/exports/music/.git","--work-tree=/exports/music","show-ref","git-annex"]
+[2014-10-28 19:18:33 CET] read: git ["--git-dir=/exports/music/.git","--work-tree=/exports/music","show-ref","--hash","refs/heads/git-annex"]
+[2014-10-28 19:18:33 CET] read: git ["--git-dir=/exports/music/.git","--work-tree=/exports/music","log","refs/heads/git-annex..1599d29eba7a0ec50217c2b4a3f4cc1ecc8b2116","--oneline","-n1"]
+[2014-10-28 19:18:33 CET] read: git ["--git-dir=/exports/music/.git","--work-tree=/exports/music","log","refs/heads/git-annex..27b47301dcb5007705d1dcd5a414df964b840467","--oneline","-n1"]
+[2014-10-28 19:18:33 CET] read: git ["--git-dir=/exports/music/.git","--work-tree=/exports/music","log","refs/heads/git-annex..a95ca0282fefcd774ec8a00b6f33c11f08f789d8","--oneline","-n1"]
+[2014-10-28 19:18:33 CET] read: git ["--git-dir=/exports/music/.git","--work-tree=/exports/music","ls-files","--cached","-z","--"]
+[2014-10-28 19:18:33 CET] chat: git ["--git-dir=/exports/music/.git","--work-tree=/exports/music","check-attr","-z","--stdin","annex.backend","annex.numcopies","--"]
+copy Alan Parsons Project/Eye In The Sky/.07 - Psychobabble.mood copy Alan Parsons Project/Eye In The Sky/.07 - Psychobabble.mood (checking sync.poelzi.org__music...) [2014-10-28 19:18:43 CET] call: ssh ["-S",".git/annex/ssh/poelzigit@sync.poelzi.org","-o","ControlMaster=auto","-o","ControlPersist=yes","-T","poelzigit@sync.poelzi.org","git-annex-shell 'inannex' '/music/' 'SHA256E-s3000--da8a3336a484a171a438c99660260cc35cbd37c339dd2c18447cd025064bc00b.mood' --uuid 35a89672-4ff5-4d9a-9bf2-cedb272bb7cb"]
+(to sync.poelzi.org__music...)
+[2014-10-28 19:18:43 CET] read: rsync ["--progress","--inplace","--perms","-e","'ssh' '-S' '.git/annex/ssh/poelzigit@sync.poelzi.org' '-o' 'ControlMaster=auto' '-o' 'ControlPersist=yes' '-T' 'poelzigit@sync.poelzi.org' 'git-annex-shell ''recvkey'' ''/music/'' ''SHA256E-s3000--da8a3336a484a171a438c99660260cc35cbd37c339dd2c18447cd025064bc00b.mood'' --uuid 35a89672-4ff5-4d9a-9bf2-cedb272bb7cb ''--'' ''remoteuuid=97a3cd71-ee6c-4437-8740-253cde0d32ae'' ''direct='' ''associatedfile=Alan Parsons Project/Eye In The Sky/.07 - Psychobabble.mood'' ''--'''","--","/exports/music/.git/annex/objects/20/Z4/SHA256E-s3000--da8a3336a484a171a438c99660260cc35cbd37c339dd2c18447cd025064bc00b.mood/SHA256E-s3000--da8a3336a484a171a438c99660260cc35cbd37c339dd2c18447cd025064bc00b.mood","dummy:"]
+rsync error: syntax or usage error (code 1) at main.c(1183) [sender=3.1.1]
+
+  rsync failed -- run git annex again to resume file transfer
+failed
+copy Alessandro Scarlatti/Motets - Gérard Lesne, Veronique Gens (1993) [300]/06 - Infirmata, Vulnerata - VI Semper Gratus.ogg copy Alessandro Scarlatti/Motets - Gérard Lesne, Veronique Gens (1993) [300]/06 - Infirmata, Vulnerata - VI Semper Gratus.ogg (checking sync.poelzi.org__music...) [2014-10-28 19:18:48 CET] call: ssh ["-S",".git/annex/ssh/poelzigit@sync.poelzi.org","-o","ControlMaster=auto","-o","ControlPersist=yes","-T","poelzigit@sync.poelzi.org","git-annex-shell 'inannex' '/music/' 'SHA256E-s3847396--05c5498f08c727645ba84270cb8d82da69a3c9bede35520aa3128b938d003a3d.ogg' --uuid 35a89672-4ff5-4d9a-9bf2-cedb272bb7cb"]
+(to sync.poelzi.org__music...)
+[2014-10-28 19:18:48 CET] read: rsync ["--progress","--inplace","--perms","-e","'ssh' '-S' '.git/annex/ssh/poelzigit@sync.poelzi.org' '-o' 'ControlMaster=auto' '-o' 'ControlPersist=yes' '-T' 'poelzigit@sync.poelzi.org' 'git-annex-shell ''recvkey'' ''/music/'' ''SHA256E-s3847396--05c5498f08c727645ba84270cb8d82da69a3c9bede35520aa3128b938d003a3d.ogg'' --uuid 35a89672-4ff5-4d9a-9bf2-cedb272bb7cb ''--'' ''remoteuuid=97a3cd71-ee6c-4437-8740-253cde0d32ae'' ''direct='' ''associatedfile=Alessandro Scarlatti/Motets - G\233rard Lesne, Veronique Gens (1993) [300]/06 - Infirmata, Vulnerata - VI Semper Gratus.ogg'' ''--'''","--","/exports/music/.git/annex/objects/XJ/f9/SHA256E-s3847396--05c5498f08c727645ba84270cb8d82da69a3c9bede35520aa3128b938d003a3d.ogg/SHA256E-s3847396--05c5498f08c727645ba84270cb8d82da69a3c9bede35520aa3128b938d003a3d.ogg","dummy:"]
+rsync error: syntax or usage error (code 1) at main.c(1183) [sender=3.1.1]
+
+  rsync failed -- run git annex again to resume file transfer
+failed
+^C
+
+
+Calling this through python gives:
+
+In [5]: subprocess.call(["rsync", "--debug=all", "--progress","--inplace","--perms","-e","'ssh' '-S' '.git/annex/ssh/poelzigit@sync.poelzi.org' '-o' 'ControlMaster=auto' '-o' 'ControlPersist=yes' '-T' 'poelzigit@sync.poelzi.org' 'git-annex-shell ''recvkey'' ''/music/'' ''SHA256E-s3000--da8a3336a484a171a438c99660260cc35cbd37c339dd2c18447cd025064bc00b.mood'' --uuid 35a89672-4ff5-4d9a-9bf2-cedb272bb7cb ''--'' ''remoteuuid=97a3cd71-ee6c-4437-8740-253cde0d32ae'' ''direct='' ''associatedfile=Alan Parsons Project/Eye In The Sky/.07 - Psychobabble.mood'' ''--'''","--","/exports/music/.git/annex/objects/20/Z4/SHA256E-s3000--da8a3336a484a171a438c99660260cc35cbd37c339dd2c18447cd025064bc00b.mood/SHA256E-s3000--da8a3336a484a171a438c99660260cc35cbd37c339dd2c18447cd025064bc00b.mood","dummy:"])
+opening connection using: ssh -S .git/annex/ssh/poelzigit@sync.poelzi.org -o ControlMaster=auto -o ControlPersist=yes -T poelzigit@sync.poelzi.org "git-annex-shell 'recvkey' '/music/' 'SHA256E-s3000--da8a3336a484a171a438c99660260cc35cbd37c339dd2c18447cd025064bc00b.mood' --uuid 35a89672-4ff5-4d9a-9bf2-cedb272bb7cb '--' 'remoteuuid=97a3cd71-ee6c-4437-8740-253cde0d32ae' 'direct=' 'associatedfile=Alan Parsons Project/Eye In The Sky/.07 - Psychobabble.mood' '--'" dummy rsync --server -pe.Lsfx --log-format=X --debug=ALL --inplace . .  (19 args)
+(Client) Protocol versions: remote=31, negotiated=31
+[sender] change_dir(/exports/music/.git/annex/objects/20/Z4/SHA256E-s3000--da8a3336a484a171a438c99660260cc35cbd37c339dd2c18447cd025064bc00b.mood)
+send_files starting
+send_files phase=1
+send_files phase=2
+send files finished
+total: matches=0  hash_hits=0  false_alarms=0 data=0
+rsync error: syntax or usage error (code 1) at main.c(1183) [sender=3.1.1]
+[sender] _exit_cleanup(code=1, file=main.c, line=1183): about to call exit(1)
+
+
+"""]]

aws library now supports multipart; initial design
diff --git a/doc/bugs/S3_upload_not_using_multipart/comment_9_74b2a392a537dde1c28089f1deed940c._comment b/doc/bugs/S3_upload_not_using_multipart/comment_9_74b2a392a537dde1c28089f1deed940c._comment
new file mode 100644
index 0000000..b965ff0
--- /dev/null
+++ b/doc/bugs/S3_upload_not_using_multipart/comment_9_74b2a392a537dde1c28089f1deed940c._comment
@@ -0,0 +1,31 @@
+[[!comment format=mdwn
+ username="joey"
+ subject="""comment 9"""
+ date="2014-10-28T16:42:21Z"
+ content="""
+The aws library now supports multipart uploads, using its
+S3.Commands.Multipart module.
+
+I don't think that multipart and chunking fit together: Typically the
+chunks are too small to need multipart for individual chunks. And the
+chunks shouldn't be combined together into a complete object at the end (at
+least not if we care about using chunking to obscure object size).
+Individual chunks sizes can vary when encryption is used, so combining them
+all into one file wouldn't work.
+
+Also, multipart uploads require at least 3 http calls, so there's no point
+using it for small objects, as it would only add overhead.
+
+So, multipart uploads should be used when not chunking, when the object to
+upload exceeds some size, which should probably defaut to something in the
+range of 100 mb to 1 gb.
+
+It might be possible to support resuming of interrupted multipart uploads.
+It seems that git-annex would need to store, locally, the UploadId,
+as well as the list of uploaded parts, including the Etag for the upload
+(which is needed when completing the multipart upload too).
+
+Also it should probably set Expires when initiating the multipart upload,
+so that incomplete ones get cleaned up after some period of time.
+Otherwise, users would probably be billed for them.
+"""]]

update notes on install methods
diff --git a/doc/install/ArchLinux.mdwn b/doc/install/ArchLinux.mdwn
index 3dd7271..43b7d13 100644
--- a/doc/install/ArchLinux.mdwn
+++ b/doc/install/ArchLinux.mdwn
@@ -1,10 +1,10 @@
-There are three non non-official packages for git-annex in the Archlinux User Repository. Any of these may be installed manually per [AUR guidelines](https://wiki.archlinux.org/index.php/AUR_User_Guidelines#Installing_packages) or using a wrapper such as [`yaourt`](https://wiki.archlinux.org/index.php/yaourt) shown below.
+There are four non non-official packages for git-annex in the Arch Linux User Repository. Any of these may be installed manually per [AUR guidelines](https://wiki.archlinux.org/index.php/AUR_User_Guidelines#Installing_packages) or using a wrapper such as [`yaourt`](https://wiki.archlinux.org/index.php/yaourt) shown below.
 
 1. The simplest method is to use the [git-annex-bin](https://aur.archlinux.org/packages/git-annex-bin/) package based on the [prebuilt Linux tarballs](http://downloads.kitenet.net/git-annex/linux/current/). This package includes many of the binary shims from the pre-built package. Although common Linux system utilities have been stripped in favor of normal dependencies, the pre-configured Haskell libraries included out of the box make this an easy install. The disadvantage is the resulting installation is a bit on the heavy side at nearly 100M.
 
        $ yaourt -Sy git-annex-bin
 
-2. A more traditional source package is available at [git-annex](https://aur.archlinux.org/packages/git-annex/). This depends on a large number of Haskell packages available from a third party repository or through Cabal. This has been historically a bit problematic and the package frequently sits flagged out of date. The state of dependencies also varies, so some intervention may be required to get this option to work.
+2. A more traditional source package is available at [git-annex](https://aur.archlinux.org/packages/git-annex/). This depends on a large number of Haskell packages available from a third party repository or through Cabal. You must either enable a 3rd party repo that has the dependencies or have a working Cabal installation. Unless you know what you are doing this is a bit problematic and some intervention may be required to get this option to work. The state of available dependency versions also varies so this may not work at all times.
 
        $ yaourt -Sy git-annex
 
@@ -12,7 +12,11 @@ There are three non non-official packages for git-annex in the Archlinux User Re
 
        $ yaourt -Sy git-annex-git
 
-Finally you may choose to forgo the Archlinux package system and install git-annex directly through cabal.
+4. A Cabal sandbox build is also available
+
+       $ yaourt -Sy git-annex-cabal
+
+Finally you may choose to forgo the Arch Linux package system entirely and install git-annex directly through cabal.
 
     $ pacman -S git rsync curl wget gnupg openssh cabal-install
     $ cabal update

removed
diff --git a/doc/install/ArchLinux/comment_1_da5919c986d2ae187bc2f73de9633978._comment b/doc/install/ArchLinux/comment_1_da5919c986d2ae187bc2f73de9633978._comment
deleted file mode 100644
index d4db232..0000000
--- a/doc/install/ArchLinux/comment_1_da5919c986d2ae187bc2f73de9633978._comment
+++ /dev/null
@@ -1,8 +0,0 @@
-[[!comment format=mdwn
- username="https://www.google.com/accounts/o8/id?id=AItOawlwYMdU0H7P7MMlD0v_BcczO-ZkYHY4zuY"
- nickname="Morris"
- subject="Arch Linux"
- date="2012-10-17T13:21:24Z"
- content="""
-For Arch Linux there should be the AUR package [git-annex-bin](https://aur.archlinux.org/packages.php?ID=63503) mentioned, because it's easier to install (no haskell dependencies to be installed) and is based on the prebuild linux binary tarball.
-"""]]

removed
diff --git a/doc/install/ArchLinux/comment_5_cbc960cd78bf5b90e3bb6cb605d6d970._comment b/doc/install/ArchLinux/comment_5_cbc960cd78bf5b90e3bb6cb605d6d970._comment
deleted file mode 100644
index b3ed084..0000000
--- a/doc/install/ArchLinux/comment_5_cbc960cd78bf5b90e3bb6cb605d6d970._comment
+++ /dev/null
@@ -1,10 +0,0 @@
-[[!comment format=mdwn
- username="http://alerque.com/"
- nickname="Caleb"
- subject="Out of date"
- date="2013-12-28T22:04:24Z"
- content="""
-The AUR package you reference is woefully out of date. I have updated the standalone variant so it might be worth using that until the maintainer catches up.
-
-    yaourt -Sy git-annex-standalone
-"""]]

the plain git-annex package does not work ATM, has a 0 release number, and is not the recomended install method on Arch, use git-annex-bin unless you know what you are doing (I'm the maintainer of both packages)
diff --git a/doc/install.mdwn b/doc/install.mdwn
index 4780445..618f32d 100644
--- a/doc/install.mdwn
+++ b/doc/install.mdwn
@@ -10,7 +10,7 @@ detailed instructions             | quick install
 &nbsp;&nbsp;[[Ubuntu]]            | `apt-get install git-annex`
 &nbsp;&nbsp;[[Fedora]]            | `yum install git-annex`
 &nbsp;&nbsp;[[FreeBSD]]           | `pkg_add -r hs-git-annex`
-&nbsp;&nbsp;[[ArchLinux]]         | `yaourt -Sy git-annex`
+&nbsp;&nbsp;[[ArchLinux]]         | `yaourt -Sy git-annex-bin`
 &nbsp;&nbsp;[[NixOS]]             | `nix-env -i git-annex`
 &nbsp;&nbsp;[[Gentoo]]            | `emerge git-annex`
 &nbsp;&nbsp;[[ScientificLinux5]]  |

diff --git a/doc/forum/Deduplication_in_direct_mode.mdwn b/doc/forum/Deduplication_in_direct_mode.mdwn
new file mode 100644
index 0000000..076d0ab
--- /dev/null
+++ b/doc/forum/Deduplication_in_direct_mode.mdwn
@@ -0,0 +1,18 @@
+Hi,
+
+I'm using git-annex across a number of (indirect) repositories, making heavy use of deduplication for organizing files according to various different aspects.
+
+Now I want to keep part of the files also on a VFAT device, which doesn't let me use indirect mode.  In direct mode, however, git-annex "get" or "copy" places a separate copy of each file in the repository, whereas in indirect mode, it would just keep a single copy and maintain a number of (inexpensive) symbolic links.  Since space on the VFAT drive is limited, I would like to just keep one, specific copy, not caring about the others.  If I "drop" an unneeded copy of the file, it also gets replaced by the ASCII "link" in all other places that contained the same file.  Therefore, I can either have multiple copies of the same data or none at all.
+
+Imagine you have a bunch of photos sorted into a directories in meant to make it easy to find them (same file name means same file content):
+
+./photo1.jpg
+./photo2.jpg
+./by-date/2014-10-27/photo1.jpg
+./by-date/2014-10-28/photo2.jpg
+./by-event/holiday-by-the-sea/photo1.jpg
+./by-event/her-birthday/photo2.jpg
+
+I want to keep a copy of ./photo?.jpg in the VFAT repository, but not the other (identical) files.  How do I do that?  Or is there really no way of doing this?
+
+Thanks.

diff --git a/doc/forum/Using_git-annex.mdwn b/doc/forum/Using_git-annex.mdwn
index e9f49ad..0e2be4e 100644
--- a/doc/forum/Using_git-annex.mdwn
+++ b/doc/forum/Using_git-annex.mdwn
@@ -2,40 +2,72 @@ Hi,
 
 I have created a git annex repo, added data. I then went to check it out in another location in the following way (my goal is to checkout origin, add a test file, push it back to origin).
  git clone ../test_repo/
+
    282  17:19   cd test_repo/
+
    283  17:19   ls
+
    284  17:19   git status
+
    285  17:22   git annex init DEV
+
    286  17:22   touch test.txt
+
    287  17:22   vi test.txt
+
    288  17:22   git annex merge
+
    289  17:22   git annex add test.txt
+
    290  17:22   git commit -am "test"
+
    291  17:23   git push origin master git-annex 
 
 However I am getting the following error
 
 Counting objects: 3, done.
+
 Delta compression using up to 48 threads.
+
 Compressing objects: 100% (3/3), done.
+
 Writing objects: 100% (3/3), 364 bytes | 0 bytes/s, done.
+
 Total 3 (delta 1), reused 0 (delta 0)
+
 remote: error: refusing to update checked out branch: refs/heads/master
+
 remote: error: By default, updating the current branch in a non-bare repository
+
 remote: error: is denied, because it will make the index and work tree inconsistent
+
 remote: error: with what you pushed, and will require 'git reset --hard' to match
+
 remote: error: the work tree to HEAD.
+
 remote: error: 
+
 remote: error: You can set 'receive.denyCurrentBranch' configuration variable to
+
 remote: error: 'ignore' or 'warn' in the remote repository to allow pushing into
+
 remote: error: its current branch; however, this is not recommended unless you
+
 remote: error: arranged to update its work tree to match what you pushed in some
+
 remote: error: other way.
+
 remote: error: 
+
 remote: error: To squelch this message and still keep the default behaviour, set
+
 remote: error: 'receive.denyCurrentBranch' configuration variable to 'refuse'.
+
 To /test_repo/
+
  ! [remote rejected] master -> master (branch is currently checked out)
+
 error: failed to push some refs to '/test_repo/'
 
+
 What am I missing?

diff --git a/doc/forum/Using_git-annex.mdwn b/doc/forum/Using_git-annex.mdwn
new file mode 100644
index 0000000..e9f49ad
--- /dev/null
+++ b/doc/forum/Using_git-annex.mdwn
@@ -0,0 +1,41 @@
+Hi,
+
+I have created a git annex repo, added data. I then went to check it out in another location in the following way (my goal is to checkout origin, add a test file, push it back to origin).
+ git clone ../test_repo/
+   282  17:19   cd test_repo/
+   283  17:19   ls
+   284  17:19   git status
+   285  17:22   git annex init DEV
+   286  17:22   touch test.txt
+   287  17:22   vi test.txt
+   288  17:22   git annex merge
+   289  17:22   git annex add test.txt
+   290  17:22   git commit -am "test"
+   291  17:23   git push origin master git-annex 
+
+However I am getting the following error
+
+Counting objects: 3, done.
+Delta compression using up to 48 threads.
+Compressing objects: 100% (3/3), done.
+Writing objects: 100% (3/3), 364 bytes | 0 bytes/s, done.
+Total 3 (delta 1), reused 0 (delta 0)
+remote: error: refusing to update checked out branch: refs/heads/master
+remote: error: By default, updating the current branch in a non-bare repository
+remote: error: is denied, because it will make the index and work tree inconsistent
+remote: error: with what you pushed, and will require 'git reset --hard' to match
+remote: error: the work tree to HEAD.
+remote: error: 
+remote: error: You can set 'receive.denyCurrentBranch' configuration variable to
+remote: error: 'ignore' or 'warn' in the remote repository to allow pushing into
+remote: error: its current branch; however, this is not recommended unless you
+remote: error: arranged to update its work tree to match what you pushed in some
+remote: error: other way.
+remote: error: 
+remote: error: To squelch this message and still keep the default behaviour, set
+remote: error: 'receive.denyCurrentBranch' configuration variable to 'refuse'.
+To /test_repo/
+ ! [remote rejected] master -> master (branch is currently checked out)
+error: failed to push some refs to '/test_repo/'
+
+What am I missing?

Added a comment: Keep historical data, but delete data never referenced
diff --git a/doc/walkthrough/unused_data/comment_2_e2ccd9a209c7a104004e998135d4b675._comment b/doc/walkthrough/unused_data/comment_2_e2ccd9a209c7a104004e998135d4b675._comment
new file mode 100644
index 0000000..91075ce
--- /dev/null
+++ b/doc/walkthrough/unused_data/comment_2_e2ccd9a209c7a104004e998135d4b675._comment
@@ -0,0 +1,13 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawn3p4i4lk_zMilvjnJ9sS6g2nerpgz0Fjc"
+ nickname="Matthias"
+ subject="Keep historical data, but delete data never referenced"
+ date="2014-10-26T12:06:25Z"
+ content="""
+Is there an easy solution for the following? There are two kinds of \"unused\" I would like to treat differently:
+
+1. Kind \"really unused\": Was added once to the annex, but symlink was never committed
+2. Kind \"only history\": A commit contains a symlink to the data, but no active branch
+
+I want to preserve \"only history\", and only drop \"really unused\". What is an elegant way to do this? Thanks for your suggestions.
+"""]]

new forum post "Recovering deleted file in direct mode"
diff --git a/doc/forum/Recovering_deleted_file_in_direct_mode.mdwn b/doc/forum/Recovering_deleted_file_in_direct_mode.mdwn
new file mode 100644
index 0000000..9dc1bda
--- /dev/null
+++ b/doc/forum/Recovering_deleted_file_in_direct_mode.mdwn
@@ -0,0 +1,13 @@
+I accidentally deleted a file from a git-annex repository with a plain "rm". How can I restore it from other repositories that have it?
+
+I tried using
+
+    git annex copy --from $REMOTE $REMOVED_FILE
+
+but git-annex complaints about
+
+    $REMOVED_FILE not found
+
+I suppose that I could switch to indirect mode and do checkout and older version, but I'd prefer not to. My repository contains thousands of quite big files; it would take a lot of time and the probability of something going wrong during the conversion is quite high (see other bugs reported during import).
+
+I'm using git-annex 5.20141024-g613f396.

Initial post
diff --git a/doc/forum/Copy_contents_of_directory_to_rsync_remotes_possible__63__.mdwn b/doc/forum/Copy_contents_of_directory_to_rsync_remotes_possible__63__.mdwn
new file mode 100644
index 0000000..abc2f8f
--- /dev/null
+++ b/doc/forum/Copy_contents_of_directory_to_rsync_remotes_possible__63__.mdwn
@@ -0,0 +1,16 @@
+I'm having trouble sharing an rsync remote between two users (as a "transfer" repository).  `git-annex` thinks `rsync` fails because it can't set the permissions on the root directory on the destination.  I've added `--perms --chmod=Dug+rwxs,Fug+rw,o-rwx` to `annex-rsync-options` so all users in the specified group on the destination can create and delete files.  However, I see in the logs errors like:
+
+    sending incremental file list
+    ./
+    rsync: failed to set permissions on "/home/shared-xfer/.": Operation not permitted (1)
+    2fe/985/GPGHMACSHA1--b36ce0a18718e7ea7cf9827c2748608df7152dfc/GPGHMACSHA1--b36ce0a18718e7ea7cf9827c2748608df7152dfc
+    
+             32,768   0%    0.00kB/s    0:00:00  
+          3,359,405 100%    4.78MB/s    0:00:00 (xfr#1, to-chk=0/5)
+    rsync error: some files/attrs were not transferred (see previous errors) (code 23) at main.c(1165) [sender=3.1.1]
+    [2014-10-18 15:16:24 EDT] chat: gpg ["--batch","--no-tty","--use-agent","--quiet","--trust-model","always","--batch","--passphrase-fd","22","--symmetric","--force-mdc","--no-textmode"]
+    [2014-10-18 15:16:24 EDT] read: rsync ["-e","'ssh' '-S' '.git/annex/ssh/blah@blah' '-o' 'ControlMaster=auto' '-o' 'ControlPersist=yes' '-l' 'blah' '-T'","--perms","--chmod=Dug+rwxs,Fug+rw,o-rwx","--progress","--recursive","--partial","--partial-dir=.rsync-partial","/blah/.git/annex/tmp/rsynctmp/24863/","blah@blah:/home/shared-xfer/"]
+
+      rsync failed -- run git annex again to resume file transfer
+
+The transfer actually completes fine, except for setting permissions of the root directory on the destination (which I don't really care about, because I have manually set them to be correct).  Is it possible for `git-annex` to copy the contents of the directory to rsync remotes?  For the example above, instead of `/blah/.git/annex/tmp/rsynctmp/24863/`, `/blah/.git/annex/tmp/rsynctmp/24863/2fe` would work.  I can't come up with an alternate solution for this server, except using the same remote user (which I'd prefer not to do).

be more precise
diff --git a/doc/install.mdwn b/doc/install.mdwn
index 171177f..4780445 100644
--- a/doc/install.mdwn
+++ b/doc/install.mdwn
@@ -19,7 +19,7 @@ detailed instructions             | quick install
 [[Windows]]                       | [download installer](https://downloads.kitenet.net/git-annex/windows/current/) **beta**
 """]]
 
-All the downloads above use https for security. For added security, see
+All the download links above use https for security. For added security, see
 [[verifying_downloads]].
 
 ## Building it yourself

I had left off the last byte of my key id
diff --git a/doc/install/verifying_downloads.mdwn b/doc/install/verifying_downloads.mdwn
index ca588ce..b366448 100644
--- a/doc/install/verifying_downloads.mdwn
+++ b/doc/install/verifying_downloads.mdwn
@@ -26,6 +26,8 @@ But, how do you know that the gpg-pubkey.asc you downloaded
 is the right key? The answer is the GPG web of trust. 
 
 * Joey Hess generates these git-annex packages,
-  and has a GPG key, [C910D9222512E3C Joey Hess <id@joeyh.name>](http://pgp.cs.uu.nl/stats/2512E3C7.html), which has
+  and has a GPG key, [C910D9222512E3C7 Joey Hess <id@joeyh.name>](http://pgp.cs.uu.nl/stats/2512E3C7.html), which has
   been verified and signed by many people.
 * Joey's GPG key has signed the git-annex distribution signing key.
+
+Don't take this page's word about this, check it yourself!

use https here too
diff --git a/doc/install/verifying_downloads.mdwn b/doc/install/verifying_downloads.mdwn
index c3413d4..ca588ce 100644
--- a/doc/install/verifying_downloads.mdwn
+++ b/doc/install/verifying_downloads.mdwn
@@ -9,8 +9,8 @@ file accompanying your package. Just append .sig to the url.
 
 For example, on Linux:
 
-	$ wget http://downloads.kitenet.net/git-annex/linux/current/git-annex-standalone-amd64.tar.gz
-	$ wget http://downloads.kitenet.net/git-annex/linux/current/git-annex-standalone-amd64.tar.gz.sig
+	$ wget https://downloads.kitenet.net/git-annex/linux/current/git-annex-standalone-amd64.tar.gz
+	$ wget https://downloads.kitenet.net/git-annex/linux/current/git-annex-standalone-amd64.tar.gz.sig
 
 You can then download the public key, and check that the package is signed
 with it.

actually use https for download urls
The urls on sub-pages were all https, but not on the main page.
diff --git a/doc/install.mdwn b/doc/install.mdwn
index adaaa3e..171177f 100644
--- a/doc/install.mdwn
+++ b/doc/install.mdwn
@@ -2,10 +2,10 @@
 
 [[!table format=dsv header=yes data="""
 detailed instructions             | quick install
-[[OSX]]                           | [download git-annex.app](http://downloads.kitenet.net/git-annex/OSX/current/)
+[[OSX]]                           | [download git-annex.app](https://downloads.kitenet.net/git-annex/OSX/current/)
 &nbsp;&nbsp;[[OSX/Homebrew]]      | `brew install git-annex`
-[[Android]]                       | [download git-annex.apk](http://downloads.kitenet.net/git-annex/android/current/) **beta**
-[[Linux|linux_standalone]]        | [download prebuilt linux tarball](http://downloads.kitenet.net/git-annex/linux/current/)
+[[Android]]                       | [download git-annex.apk](https://downloads.kitenet.net/git-annex/android/current/) **beta**
+[[Linux|linux_standalone]]        | [download prebuilt linux tarball](https://downloads.kitenet.net/git-annex/linux/current/)
 &nbsp;&nbsp;[[Debian]]            | `apt-get install git-annex`
 &nbsp;&nbsp;[[Ubuntu]]            | `apt-get install git-annex`
 &nbsp;&nbsp;[[Fedora]]            | `yum install git-annex`
@@ -16,7 +16,7 @@ detailed instructions             | quick install
 &nbsp;&nbsp;[[ScientificLinux5]]  |
 &nbsp;&nbsp;[[openSUSE]]          | 
 &nbsp;&nbsp;[[Docker]]            | 
-[[Windows]]                       | [download installer](http://downloads.kitenet.net/git-annex/windows/current/) **beta**
+[[Windows]]                       | [download installer](https://downloads.kitenet.net/git-annex/windows/current/) **beta**
 """]]
 
 All the downloads above use https for security. For added security, see

add news item for git-annex 5.20141024
diff --git a/doc/news/version_5.20140915.mdwn b/doc/news/version_5.20140915.mdwn
deleted file mode 100644
index 7aa6477..0000000
--- a/doc/news/version_5.20140915.mdwn
+++ /dev/null
@@ -1,27 +0,0 @@
-git-annex 5.20140915 released with [[!toggle text="these changes"]]
-[[!toggleable text="""
-   * New annex.hardlink setting. Closes: #[758593](http://bugs.debian.org/758593)
-   * init: Automatically detect when a repository was cloned with --shared,
-     and set annex.hardlink=true, as well as marking the repository as
-     untrusted.
-   * Fix parsing of ipv6 address in git remote address when it was not
-     formatted as an url.
-   * The annex-rsync-transport configuration is now also used when checking
-     if a key is present on a rsync remote, and when dropping a key from
-     the remote.
-   * Promote file not found warning message to an error.
-   * Fix transfer lock file FD leak that could occur when two separate
-     git-annex processes were both working to perform the same set of
-     transfers.
-   * sync: Ensure that pending changes to git-annex branch are committed
-     before push when in direct mode. (Fixing a very minor reversion.)
-   * WORM backend: Switched to include the relative path to the file inside
-     the repository, rather than just the file's base name. Note that if you're
-     relying on such things to keep files separate with WORM, you should really
-     be using a better backend.
-   * Rather than crashing when there's a problem with the requested bloomfilter
-     capacity/accuracy, fall back to a reasonable default bloom filter size.
-   * Fix build with optparse-applicative 0.10. Closes: #[761484](http://bugs.debian.org/761484)
-   * webapp: Fixed visual glitch in xmpp pairing that was reported live by a
-     user who tracked me down in front of a coffee cart in Portland.
-     (New bug reporting method of choice?)"""]]
\ No newline at end of file
diff --git a/doc/news/version_5.20141024.mdwn b/doc/news/version_5.20141024.mdwn
new file mode 100644
index 0000000..b50a81b
--- /dev/null
+++ b/doc/news/version_5.20141024.mdwn
@@ -0,0 +1,21 @@
+git-annex 5.20141024 released with [[!toggle text="these changes"]]
+[[!toggleable text="""
+   * vicfg: Deleting configurations now resets to the default, where
+     before it has no effect.
+   * Remove hurd stuff from cabal file, since hackage currently rejects
+     it, and the test suite fails on hurd.
+   * initremote: Don't allow creating a special remote that has the same
+     name as an existing git remote.
+   * Windows: Use haskell setenv library to clean up several ugly workarounds
+     for inability to manipulate the environment on windows. This includes
+     making git-annex not re-exec itself on start on windows, and making the
+     test suite on Windows run tests without forking.
+   * glacier: Fix pipe setup when calling glacier-cli to retrieve an object.
+   * info: When run on a single annexed file, displays some info about the
+     file, including its key and size.
+   * info: When passed the name or uuid of a remote, displays info about that
+     remote. Remotes that support encryption, chunking, or embedded
+     creds will include that in their info.
+   * enableremote: When the remote has creds, update the local creds cache
+     file. Before, the old version of the creds could be left there, and
+     would continue to be used."""]]
\ No newline at end of file

Added a comment
diff --git a/doc/bugs/Issue_fewer_S3_GET_requests/comment_3_6ccbb1cff7bc6b4640220d98f7ce21c3._comment b/doc/bugs/Issue_fewer_S3_GET_requests/comment_3_6ccbb1cff7bc6b4640220d98f7ce21c3._comment
new file mode 100644
index 0000000..353281d
--- /dev/null
+++ b/doc/bugs/Issue_fewer_S3_GET_requests/comment_3_6ccbb1cff7bc6b4640220d98f7ce21c3._comment
@@ -0,0 +1,12 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="209.250.56.96"
+ subject="comment 3"
+ date="2014-10-24T16:02:23Z"
+ content="""
+The OOM is [[S3_memory_leaks]]; fixed in the s3-aws branch.
+
+Yeah, GET of a bucket is doable. Another problem with it though is, if the bucket has a lot of contents, such as many files, or large files split into many chunks, that all has to be buffered in memory or processed as a stream. It would make sense in operations where git-annex knows it wants to check every key in a bucket. `git annex unused --from $s3remote` is the case that springs to mind where it could be quite useful to do that. Integrating it with `get`, not so much.
+
+I'd be inclined to demote this to a wishlist todo item to try to use bucket GET for `unused`. And/or rethink whether it makes sense for `copy --to` to run in --fast mode by default. I've been back and forth on that question before, but just from a runtime perspective, not from a 13 cents perspective. ;)
+"""]]

Added a comment
diff --git a/doc/bugs/Issue_fewer_S3_GET_requests/comment_2_8fdeb3352ac00a76625ec9c007e5b76a._comment b/doc/bugs/Issue_fewer_S3_GET_requests/comment_2_8fdeb3352ac00a76625ec9c007e5b76a._comment
new file mode 100644
index 0000000..b3b2594
--- /dev/null
+++ b/doc/bugs/Issue_fewer_S3_GET_requests/comment_2_8fdeb3352ac00a76625ec9c007e5b76a._comment
@@ -0,0 +1,14 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawmUJBh1lYmvfCCiGr3yrdx-QhuLCSRnU5c"
+ nickname="Justin"
+ subject="comment 2"
+ date="2014-10-24T04:49:20Z"
+ content="""
+Oh jeez, I screwed that up wrt HEAD and GET.  Sorry.  The cost per HEAD on Google is 1/10 the price of GET, so we're talking $.13 to HEAD my 130k-file annex, which is totally reasonable.
+
+One can GET a bucket, which is what I was looking at.  This returns up to 1000 elements of its contents (and there's a way to iterate over larger buckets).  Of course this would only be useful if the majority of files in the bucket were of interest to git-annex, and it sounds like more trouble than it's worth at the prices I'm seeing.
+
+There might be a throughput improvement to be had by keeping the connection alive, although in my brief investigation, I think there may be a larger gain to be had by pipelining the various steps.  Based on the fact that git-annex oomed when trying to upload a large file from my rpi, it seems like maybe the whole file is encrypted in memory before it's uploaded?  And certainly the HEAD(s) appear not to be done in parallel with the upload.
+
+Sorry again for that HEAD/GET fail.
+"""]]

Added a comment
diff --git a/doc/bugs/Upload_to_S3_fails_/comment_11_65cb9b1dd69cd657f2cfde036eb60417._comment b/doc/bugs/Upload_to_S3_fails_/comment_11_65cb9b1dd69cd657f2cfde036eb60417._comment
new file mode 100644
index 0000000..ec59d6a
--- /dev/null
+++ b/doc/bugs/Upload_to_S3_fails_/comment_11_65cb9b1dd69cd657f2cfde036eb60417._comment
@@ -0,0 +1,11 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="209.250.56.96"
+ subject="comment 11"
+ date="2014-10-23T21:05:15Z"
+ content="""
+When it resumes, it will start at 0% but jump forward to the resume point pretty quickly, after verifying which chunks have already been sent.
+If any full chunk gets transferred, I'd expect it to resume. This may not be very obvious it's happening for smaller files.
+
+I have been running `git annex testremote` against S3 special remotes today, and have not managed to reproduce this problem (using either the old S3 or the new AWS libraries). It could be anything, including a problem with your network or the network between you and the S3 endpoint. Have you tried using a different S3 region?
+"""]]

devblog
diff --git a/doc/devblog/day__228_new_AWS.mdwn b/doc/devblog/day__228_new_AWS.mdwn
new file mode 100644
index 0000000..3003a79
--- /dev/null
+++ b/doc/devblog/day__228_new_AWS.mdwn
@@ -0,0 +1,13 @@
+New AWS region in Germany announced today. git-annex doesn't support it
+yet, unless you're using the `s3-aws` branch.
+
+I cleaned up that branch, got it building again, and re-tested it with
+`testremote`, and then fixed a problem the test suite found that was
+caused by some changes in the haskell aws library.
+
+Unfortunately, s3-aws is [not ready to be merged](http://git-annex.branchable.com/bugs/new_AWS_region___40__eu-central-1__41__)
+because of some cabal dependency problems involving `dbus` and `random`. I did
+go ahead and update Debian's haskell-aws package to cherry-pick
+from a newer version the change needed for Inernet Archive
+support, which allows building the s3-aws branch on Debian.
+Getting closer..

Added a comment
diff --git a/doc/bugs/new_AWS_region___40__eu-central-1__41__/comment_2_6ceb3251b7067591d34cd146d19ccea9._comment b/doc/bugs/new_AWS_region___40__eu-central-1__41__/comment_2_6ceb3251b7067591d34cd146d19ccea9._comment
new file mode 100644
index 0000000..fab525b
--- /dev/null
+++ b/doc/bugs/new_AWS_region___40__eu-central-1__41__/comment_2_6ceb3251b7067591d34cd146d19ccea9._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="209.250.56.96"
+ subject="comment 2"
+ date="2014-10-23T19:51:46Z"
+ content="""
+Looks like the cabal dependency hell is managable; if done in system without anything installed, cabal manages to install the new aws, and everything else, except for the dbus library. Still not ready to be merged though.
+"""]]

Added a comment
diff --git a/doc/bugs/new_AWS_region___40__eu-central-1__41__/comment_1_23d65c7e05f6e7312bbdbd039bf8d308._comment b/doc/bugs/new_AWS_region___40__eu-central-1__41__/comment_1_23d65c7e05f6e7312bbdbd039bf8d308._comment
new file mode 100644
index 0000000..e56e1be
--- /dev/null
+++ b/doc/bugs/new_AWS_region___40__eu-central-1__41__/comment_1_23d65c7e05f6e7312bbdbd039bf8d308._comment
@@ -0,0 +1,14 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="209.250.56.96"
+ subject="comment 1"
+ date="2014-10-23T18:52:48Z"
+ content="""
+The S3 library that git-annex is using does not support the authentication method that this region uses.
+
+It is supported by the aws library that git-annex uses in the `s3-aws` branch in git, and I already added the region there this morning.
+
+I can't merge `s3-aws` yet; the neccessary version of the aws library is not yet available in eg, Debian. And even upgrading aws from cabal seems to result in dependency hell, due to its needing a newer version of scientific. This should all sort itself out in time.
+
+If you need this region, you'll need to try to build git-annex's s3-aws branch, for now.
+"""]]

diff --git a/doc/bugs/new_AWS_region___40__eu-central-1__41__.mdwn b/doc/bugs/new_AWS_region___40__eu-central-1__41__.mdwn
new file mode 100644
index 0000000..80f89b2
--- /dev/null
+++ b/doc/bugs/new_AWS_region___40__eu-central-1__41__.mdwn
@@ -0,0 +1,8 @@
+### Please describe the problem.
+
+Amazon has opened up a new region in AWS with a datacenter in Frankfurt/Germany.
+
+* Region Name: EU (Frankfurt) region
+* Region: eu-central-1
+
+This should be added to the "Adding an Amazon S3 repository" page in the Datacenter dropdown of the webapp.

typo
diff --git a/doc/bugs/Issue_fewer_S3_GET_requests/comment_1_59a6b87d01c003bf55cde4c882e1778c._comment b/doc/bugs/Issue_fewer_S3_GET_requests/comment_1_59a6b87d01c003bf55cde4c882e1778c._comment
index 888e8e9..b0c6b76 100644
--- a/doc/bugs/Issue_fewer_S3_GET_requests/comment_1_59a6b87d01c003bf55cde4c882e1778c._comment
+++ b/doc/bugs/Issue_fewer_S3_GET_requests/comment_1_59a6b87d01c003bf55cde4c882e1778c._comment
@@ -11,5 +11,8 @@ The man page documents this:
 
 As you've noted, this has to rely on the location tracking information being up-to-date, so if it's not it might miss copying a file to the remote that the remote doesn't currently have but used to. Otherwise, it's fine to use `copy --fast --to --remote` or `copy --not --in remote --to remote`, which is functionally identical.
 
-The check is not a GET request, it's a HEAD request, to check if the file is present. Does S3 have a way to combine multiple HEAD requests in a single http request? That seems unlikely. Maybe it is enough to reuse an open http connection for multiple GETs? Anything needing a single HEAD request would not fit well into git-annex, but ways to do more caching of open http connections are being considered.
+The check is not a GET request, it's a HEAD request, to check if the file
+is present. Does S3 have a way to combine multiple HEAD requests in a
+single http request? That seems unlikely. Maybe it is enough to reuse an
+open http connection for multiple HEADs? Anything needing a single HEAD request would not fit well into git-annex, but ways to do more caching of open http connections are being considered.
 """]]

Added a comment
diff --git a/doc/bugs/Issue_fewer_S3_GET_requests/comment_1_59a6b87d01c003bf55cde4c882e1778c._comment b/doc/bugs/Issue_fewer_S3_GET_requests/comment_1_59a6b87d01c003bf55cde4c882e1778c._comment
new file mode 100644
index 0000000..888e8e9
--- /dev/null
+++ b/doc/bugs/Issue_fewer_S3_GET_requests/comment_1_59a6b87d01c003bf55cde4c882e1778c._comment
@@ -0,0 +1,15 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="209.250.56.96"
+ subject="comment 1"
+ date="2014-10-22T21:36:27Z"
+ content="""
+The man page documents this:
+
+> To avoid contacting the remote to check if it has every
+> file when copying --to the repository, specify --fast
+
+As you've noted, this has to rely on the location tracking information being up-to-date, so if it's not it might miss copying a file to the remote that the remote doesn't currently have but used to. Otherwise, it's fine to use `copy --fast --to --remote` or `copy --not --in remote --to remote`, which is functionally identical.
+
+The check is not a GET request, it's a HEAD request, to check if the file is present. Does S3 have a way to combine multiple HEAD requests in a single http request? That seems unlikely. Maybe it is enough to reuse an open http connection for multiple GETs? Anything needing a single HEAD request would not fit well into git-annex, but ways to do more caching of open http connections are being considered.
+"""]]

Added a comment
diff --git a/doc/bugs/get_from_glacier_fails_too_early/comment_8_1267236ae339d1affd46edb5cf5f4ac5._comment b/doc/bugs/get_from_glacier_fails_too_early/comment_8_1267236ae339d1affd46edb5cf5f4ac5._comment
new file mode 100644
index 0000000..5265d7c
--- /dev/null
+++ b/doc/bugs/get_from_glacier_fails_too_early/comment_8_1267236ae339d1affd46edb5cf5f4ac5._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawkck-Tokgfh_1Fwh6pkl69xPA_dYUgA4Tg"
+ nickname="Benjamin"
+ subject="comment 8"
+ date="2014-10-22T19:56:23Z"
+ content="""
+Thanks, deleting the cached file fixed it.
+"""]]

Added a comment
diff --git a/doc/bugs/get_from_glacier_fails_too_early/comment_7_c96b71759fe0d2af450e321ca57edb46._comment b/doc/bugs/get_from_glacier_fails_too_early/comment_7_c96b71759fe0d2af450e321ca57edb46._comment
new file mode 100644
index 0000000..0cdef26
--- /dev/null
+++ b/doc/bugs/get_from_glacier_fails_too_early/comment_7_c96b71759fe0d2af450e321ca57edb46._comment
@@ -0,0 +1,12 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="209.250.56.96"
+ subject="comment 7"
+ date="2014-10-22T18:30:29Z"
+ content="""
+I forgot to include the creds in `git annex info` for glacier; fixed that now.
+
+It seems that changing the creds with `enableremote` did embed them into your git repository, but it neglected to update the .git/annex/creds/$remoteuuid file that caches the creds locally. So I think that your old creds are still cached there, and still being used, and this explains why the file is not found in glacier; the wrong creds are being used to access it! You can work around this by deleting the .git/annex/creds/$remoteuuid file correspnding to the uuid of the glacier remote. (You can also look at that file and compare it with what the creds are supposed to be.) I have fixed git-annex enableremote to update that creds file.
+
+Also, it looks like you did not fall afoul of the [[upgrades/insecure_embedded_creds]] problem! If you had, this new version of git-annex would be complaining that it had detected that problem. If you want to double-check that, the s3creds= value is base64 encoded, and when run through `base64 -d`, it should yield a gpg encrypted file. If your repo did have that problem, it would instead decode to the creds in clear text.
+"""]]

fix: get, not drop for get...
diff --git a/doc/tips/file_manager_integration.mdwn b/doc/tips/file_manager_integration.mdwn
index b81d758..8f47a3d 100644
--- a/doc/tips/file_manager_integration.mdwn
+++ b/doc/tips/file_manager_integration.mdwn
@@ -31,7 +31,7 @@ XFCE uses the Thunar file manager, which can also be easily configured to allow
 
 for drop, and for get:
 
-    git-annex drop --notify-start --notify-finish -- %F
+    git-annex get --notify-start --notify-finish -- %F
 
 This gives me the resulting config on disk, in `.config/Thunar/uca.xml`:
 

diff --git a/doc/bugs/Issue_fewer_S3_GET_requests.mdwn b/doc/bugs/Issue_fewer_S3_GET_requests.mdwn
new file mode 100644
index 0000000..8bbcfa1
--- /dev/null
+++ b/doc/bugs/Issue_fewer_S3_GET_requests.mdwn
@@ -0,0 +1,9 @@
+It appears that git-annex issues one GET request to S3 / Google cloud for every file it tries to copy, if you don't pass --fast.  (I could be wrong; I'm basing this on the fact that each "checking <remote name>" takes about the same amount of time, and that it's slow enough to be hitting the network.)
+
+Amazon lets you GET 1000 objects in one GET request, and afaict a request that returns 1000 objects costs just as much as a request that returns 1 object.  The cost of GET'ing every file in my annex is nontrivial -- Google charges 0.01 per 1000 GETs, and my repo has 130k objects, so that's $1.3, compared to a monthly cost for storage of under $10.  This means that if I want to back up my files more than, say, once a week, I need to write a script that parses the JSON output of git annex whereis and uploads with --fast only the files that aren't present in the cloud.  It also means that I have to trust the output of whereis.
+
+All those GETs also slow down the non-fast copy, and this also applies to other kinds of remotes.
+
+There are a number of ways one could implement this.  One way would be to have a command that updates the whereis data from the remote and then to add a parameter (maybe you already have it) to copy that's like --fast but skips files that are already present (maybe this is what --fast already does, but I did a quick check and it doesn't seem to).  Because of the way git annex names files, I think it would be hard to coalesce GETs during a copy command, but it could be done.
+
+Anyway, please don't consider this a high-priority request; I can get by as-is, and I <3 git annex.

Added a comment
diff --git a/doc/forum/ARM_build_on_Zyxel_NAS/comment_3_b4f6e5ac672e8ece36cceb74ff3315dd._comment b/doc/forum/ARM_build_on_Zyxel_NAS/comment_3_b4f6e5ac672e8ece36cceb74ff3315dd._comment
new file mode 100644
index 0000000..2ff40ef
--- /dev/null
+++ b/doc/forum/ARM_build_on_Zyxel_NAS/comment_3_b4f6e5ac672e8ece36cceb74ff3315dd._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="209.250.56.96"
+ subject="comment 3"
+ date="2014-10-22T16:22:24Z"
+ content="""
+I know kernel 3.2 would work. I don't know what the minimum kernel supported by glibc 2.13 is.
+"""]]

Added a comment
diff --git a/doc/forum/git_annex_sync:_only_git-annex/comment_4_cc3cebf5bc403b490e31e63af964a823._comment b/doc/forum/git_annex_sync:_only_git-annex/comment_4_cc3cebf5bc403b490e31e63af964a823._comment
new file mode 100644
index 0000000..134ea87
--- /dev/null
+++ b/doc/forum/git_annex_sync:_only_git-annex/comment_4_cc3cebf5bc403b490e31e63af964a823._comment
@@ -0,0 +1,12 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="209.250.56.96"
+ subject="comment 4"
+ date="2014-10-22T16:18:50Z"
+ content="""
+I struggle to see how you could draw that conclusion from what I said.
+
+git-annex will work fine in an existing git repository. You can mix regular git commands like `git add`, `git push`, `git pull`, `git merge` with git-annex commands like `git annex add`, `git annex copy --to origin`, `git annex get`, `git annex merge`, in the same repository.
+
+The `git annex sync` command effcetively runs `git commit; git pull; git annex merge; git push; git annex copy --to origin; git annex get`. If you don't want to run all those commands at once, you don't want to run `git annex sync`. That will not prevent you from using git-annex in any way.
+"""]]

Added a comment
diff --git a/doc/forum/git_annex_sync:_only_git-annex/comment_3_7753f8276478e0e05c10dba2b84bbc49._comment b/doc/forum/git_annex_sync:_only_git-annex/comment_3_7753f8276478e0e05c10dba2b84bbc49._comment
new file mode 100644
index 0000000..49a61c0
--- /dev/null
+++ b/doc/forum/git_annex_sync:_only_git-annex/comment_3_7753f8276478e0e05c10dba2b84bbc49._comment
@@ -0,0 +1,12 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="209.250.56.96"
+ subject="comment 3"
+ date="2014-10-22T16:18:16Z"
+ content="""
+I struggle to see how you could draw that conclusion from what I said.
+
+git-annex will work fine in an existing git repository. You can mix regular git commands like `git add`, `git push`, `git pull`, `git merge` with git-annex commands like `git annex add`, `git annex copy --to origin`, `git annex get`, `git annex merge`, in the same repository.
+
+The `git annex sync` command effcetively runs `git commit; git pull; git annex merge; git push; git annex copy --to origin; git annex get`. If you don't want to run all those commands at once, you don't want to run `git annex sync`. That will not prevent you from using git-annex in any way.
+"""]]

Added a comment
diff --git a/doc/forum/git_annex_sync:_only_git-annex/comment_2_50e137e4d278dfd0103a41aff0cfa3a9._comment b/doc/forum/git_annex_sync:_only_git-annex/comment_2_50e137e4d278dfd0103a41aff0cfa3a9._comment
new file mode 100644
index 0000000..10f3792
--- /dev/null
+++ b/doc/forum/git_annex_sync:_only_git-annex/comment_2_50e137e4d278dfd0103a41aff0cfa3a9._comment
@@ -0,0 +1,10 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawlog_5wIICaMcrKTexlFNA6IO6UTp323aE"
+ nickname="Torkaly"
+ subject="comment 2"
+ date="2014-10-22T08:56:43Z"
+ content="""
+Thank you for your response.
+
+So annex looks like it's not really designed to work with an existing git repository, but only standalone?!
+"""]]

Added a comment
diff --git a/doc/forum/ARM_build_on_Zyxel_NAS/comment_2_44c8f1af0cbe9ad51794e6d8d16be627._comment b/doc/forum/ARM_build_on_Zyxel_NAS/comment_2_44c8f1af0cbe9ad51794e6d8d16be627._comment
new file mode 100644
index 0000000..9cec2bf
--- /dev/null
+++ b/doc/forum/ARM_build_on_Zyxel_NAS/comment_2_44c8f1af0cbe9ad51794e6d8d16be627._comment
@@ -0,0 +1,9 @@
+[[!comment format=mdwn
+ username="musella"
+ ip="84.73.42.152"
+ subject="comment 2"
+ date="2014-10-21T23:35:35Z"
+ content="""
+what is the minimal kernel version that I would need?
+
+"""]]

Added a comment: autobuild test
diff --git a/doc/bugs/get_from_glacier_fails_too_early/comment_6_9c8f262b3d8b37f2e68108337acbd303._comment b/doc/bugs/get_from_glacier_fails_too_early/comment_6_9c8f262b3d8b37f2e68108337acbd303._comment
new file mode 100644
index 0000000..48e9f53
--- /dev/null
+++ b/doc/bugs/get_from_glacier_fails_too_early/comment_6_9c8f262b3d8b37f2e68108337acbd303._comment
@@ -0,0 +1,48 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawkck-Tokgfh_1Fwh6pkl69xPA_dYUgA4Tg"
+ nickname="Benjamin"
+ subject="autobuild test"
+ date="2014-10-21T22:09:47Z"
+ content="""
+Okay I managed to package the autobuild for my Arch system and installed. Here is what I get, retrieving finished glacier retrieval jobs which was started yesterday:
+
+Without AWS credentials as environment variables, the call fails:
+[[!format sh \"\"\"
+[ben@voyagerS9 annextest]$ git annex get --from=glacier mydir/myfile1                                                                                                                    
+get mydir/myfile (from glacier...) (gpg)
+['/usr/local/bin/glacier', '--region=us-east-1', 'archive', 'retrieve', '-o-', 'glacier-myvault', 'GPGHMACSHA1--4286b1a121892c9e64de436725478b0bc5038e67']
+glacier: archive 'GPGHMACSHA1--4286b1a121892c9e64de436725478b0bc5038e67' not found
+failed
+git-annex: get: 1 failed 
+\"\"\"]]
+
+I patched the glacier-cli Python source so that it prints out the command arguments argv.
+The archive _does_ exist. Executing the glacier-cli command manually is successful. So is calling
+git-annex with AWS credentials exported into env:
+
+[[!format sh \"\"\"
+[ben@voyagerS9 annextest]$ git annex get --from=glacier mydir/myfile2
+get mydir/myfile2 (from glacier...) (gpg)
+['/usr/local/bin/glacier', '--region=us-east-1', 'archive', 'retrieve', '-o-', 'glacier-myvault', 'GPGHMACSHA1--c3827c03d48b4829c7cc584778652c66e2784b0f']
+ok
+(Recording state in git...)
+\"\"\"]]
+
+So I guess one bug is fixed, although I think there is a wrong error message.
+
+Regarding AWS credentials, I have no success in updating credentials or finding out which if any are embedded:
+[[!format sh \"\"\"
+[ben@voyagerS9 annextest]$ git annex info glacier                                                                                                                                                                                                                              
+remote: glacier                                                                                                                                                                                                                                                                
+description: [glacier]                                                                                                                                                                                                                                                         
+uuid: b4dcf525-40c7-4f04-86cc-3850d1260680                                                                                                                                                                                                                                     
+cost: 1050.0                                                                                                                                                                                                                                                                   
+type: glacier                                                                                                                                                                                                                                                                  
+glacier vault: glacier-myvault                                                                                                                                                                                                                    
+encryption: encrypted (to gpg keys: MYKEY)                                                                                                                                                                                                                          
+chunking: none
+\"\"\"]]
+
+When I checkout the git-annex branch and look into the remote.log I see fields for cipher, cipherkeys, datacenter, embedcreds=yes, name, s3creds, type, vault, timestamp.
+The s3creds field does not look like my current AWS credentials, at least not in plaintext.
+"""]]

Added a comment
diff --git a/doc/bugs/Upload_to_S3_fails_/comment_10_b7e912bac673bdffa5775b71d5d39937._comment b/doc/bugs/Upload_to_S3_fails_/comment_10_b7e912bac673bdffa5775b71d5d39937._comment
new file mode 100644
index 0000000..ecc34d4
--- /dev/null
+++ b/doc/bugs/Upload_to_S3_fails_/comment_10_b7e912bac673bdffa5775b71d5d39937._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawkvSZ1AFJdY_1FeutZr_KWeqtzjZta1PNE"
+ nickname="Thedward"
+ subject="comment 10"
+ date="2014-10-21T21:25:57Z"
+ content="""
+The only files that succeeded were small text files. The other files — 3-200MiB — all failed.
+"""]]

Added a comment
diff --git a/doc/bugs/Upload_to_S3_fails_/comment_9_dd837a1cb2146224b9c000cbeea4f3b3._comment b/doc/bugs/Upload_to_S3_fails_/comment_9_dd837a1cb2146224b9c000cbeea4f3b3._comment
new file mode 100644
index 0000000..4cfda38
--- /dev/null
+++ b/doc/bugs/Upload_to_S3_fails_/comment_9_dd837a1cb2146224b9c000cbeea4f3b3._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="209.250.56.96"
+ subject="comment 9"
+ date="2014-10-21T20:22:52Z"
+ content="""
+How big is the file that it fails to copy?
+"""]]

close
diff --git a/doc/bugs/_WebApp_crashed:_getAddrInfo:_does_not_exist___40__Name_or_service_not_known__41_____91__2014-07-23_16:41:45_CEST__93___WebApp:_warning_WebApp_crashed:_getAddrInfo:_does_not_exist___40__Name_or_service_not_known__41__.mdwn b/doc/bugs/_WebApp_crashed:_getAddrInfo:_does_not_exist___40__Name_or_service_not_known__41_____91__2014-07-23_16:41:45_CEST__93___WebApp:_warning_WebApp_crashed:_getAddrInfo:_does_not_exist___40__Name_or_service_not_known__41__.mdwn
index 77d2beb..69732a7 100644
--- a/doc/bugs/_WebApp_crashed:_getAddrInfo:_does_not_exist___40__Name_or_service_not_known__41_____91__2014-07-23_16:41:45_CEST__93___WebApp:_warning_WebApp_crashed:_getAddrInfo:_does_not_exist___40__Name_or_service_not_known__41__.mdwn
+++ b/doc/bugs/_WebApp_crashed:_getAddrInfo:_does_not_exist___40__Name_or_service_not_known__41_____91__2014-07-23_16:41:45_CEST__93___WebApp:_warning_WebApp_crashed:_getAddrInfo:_does_not_exist___40__Name_or_service_not_known__41__.mdwn
@@ -42,3 +42,5 @@ WebApp crashed: getAddrInfo: does not exist (Name or service not known)
 
 # End of transcript or log.
 """]]
+
+> [[done]] --[[Joey]] 

confirmed
diff --git a/doc/bugs/present_files__47__directories_are_dropped_after_a_sync.mdwn b/doc/bugs/present_files__47__directories_are_dropped_after_a_sync.mdwn
index 922936d..69c029c 100644
--- a/doc/bugs/present_files__47__directories_are_dropped_after_a_sync.mdwn
+++ b/doc/bugs/present_files__47__directories_are_dropped_after_a_sync.mdwn
@@ -38,3 +38,4 @@ Similarly for directories:
 
 
 [[!meta title="manual mode preferred content expression does not want newer versions of present files"]]
+[[!tag confirmed]]

Added a comment
diff --git a/doc/bugs/present_files__47__directories_are_dropped_after_a_sync/comment_2_7316cba69b9dc0415fea1389238edf25._comment b/doc/bugs/present_files__47__directories_are_dropped_after_a_sync/comment_2_7316cba69b9dc0415fea1389238edf25._comment
new file mode 100644
index 0000000..194f7a3
--- /dev/null
+++ b/doc/bugs/present_files__47__directories_are_dropped_after_a_sync/comment_2_7316cba69b9dc0415fea1389238edf25._comment
@@ -0,0 +1,14 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="209.250.56.96"
+ subject="comment 2"
+ date="2014-10-21T20:20:25Z"
+ content="""
+The problem is that there's no way for preferred content expressions to specify that a file is wanted just because some old version of the file is (or was) present.
+
+It's not clear to me how that could be added to the preferred content expressions in an efficient way.
+
+It might be possible to hack `git annex sync --content` and the assistant to look at incoming merges, and queue downloads of newer versions of files before merging.
+
+Also being discussed at <https://github.com/datalad/datalad/issues/6>.
+"""]]

url fix
diff --git a/doc/bugs/present_files__47__directories_are_dropped_after_a_sync.mdwn b/doc/bugs/present_files__47__directories_are_dropped_after_a_sync.mdwn
index 6564b97..922936d 100644
--- a/doc/bugs/present_files__47__directories_are_dropped_after_a_sync.mdwn
+++ b/doc/bugs/present_files__47__directories_are_dropped_after_a_sync.mdwn
@@ -1,6 +1,6 @@
 ### Please describe the problem.
 
-This is a followup from the discussion on https://git-annex.branchable.com/forum/Standard_groups__47__preferred_contents/ where I unfortunately did not get a complete answer.
+This is a followup from the discussion on <https://git-annex.branchable.com/forum/Standard_groups__47__preferred_contents/> where I unfortunately did not get a complete answer.
 I don't know if it is really a bug but at least it does not work as I would expect and the documentation provides no clear discussion on that.
 
 Now to the problem:

retitle
diff --git a/doc/bugs/present_files__47__directories_are_dropped_after_a_sync.mdwn b/doc/bugs/present_files__47__directories_are_dropped_after_a_sync.mdwn
index 432ab90..6564b97 100644
--- a/doc/bugs/present_files__47__directories_are_dropped_after_a_sync.mdwn
+++ b/doc/bugs/present_files__47__directories_are_dropped_after_a_sync.mdwn
@@ -36,3 +36,5 @@ Similarly for directories:
     key/value backends: SHA256E SHA1E SHA512E SHA224E SHA384E SKEIN256E SKEIN512E SHA256 SHA1 SHA512 SHA224 SHA384 SKEIN256 SKEIN512 WORM URL
     remote types: git gcrypt S3 bup directory rsync web webdav tahoe glacier ddar hook external
 
+
+[[!meta title="manual mode preferred content expression does not want newer versions of present files"]]

title
diff --git a/doc/bugs/annex_get_fails_from_read-only_filesystem.mdwn b/doc/bugs/annex_get_fails_from_read-only_filesystem.mdwn
index 43efc38..18b446e 100644
--- a/doc/bugs/annex_get_fails_from_read-only_filesystem.mdwn
+++ b/doc/bugs/annex_get_fails_from_read-only_filesystem.mdwn
@@ -22,3 +22,6 @@ annex.version = 3 in the remote
     local repository version: 5
     supported repository version: 5
     upgrade supported from repository versions: 0 1 2 4
+
+[[!tag confirmed]]
+[[!meta title="read-only filesystem on remote prevents auto-upgrade from v3 to v5, and prevents using a remote"]]

move to todo
diff --git a/doc/bugs/sync_does_not_preserve_timestamps.mdwn b/doc/bugs/sync_does_not_preserve_timestamps.mdwn
deleted file mode 100644
index 0d8f237..0000000
--- a/doc/bugs/sync_does_not_preserve_timestamps.mdwn
+++ /dev/null
@@ -1,16 +0,0 @@
-### Please describe the problem.
-I see that files are synced between my computers with git-annex but the timestamps do not match. The one that receives files always puts the current time of file creation on the file.
-
-### What steps will reproduce the problem?
-Install git-annex on two computers. Connect with XMPP. Then add cloud storage with shared encryption for transferring files. Since you want also backup, choose "full backup" as the type of cloud storage.
-
-
-### What version of git-annex are you using? On what operating system?
-Downloaded binary package dated 13/09/2014 amd64 Ubuntu 14.04.
-
-
-### Please provide any additional information below.
-
-Files are in sync. For example, I move a file from a directory to my synced annex directory. It contains timestamp of 01/01/2010 for example. Once the file gets transferred to the remote computer, it gets current time, for example 20/09/2014 rather than keeping 01/01/2010. 
-
-All computers are linux based, ext4 filesystems. File transfers are done through shared encryption rsync remote.
diff --git a/doc/bugs/sync_does_not_preserve_timestamps/comment_1_caf5e5cb17f4d05fff8c2fab661cd93f._comment b/doc/bugs/sync_does_not_preserve_timestamps/comment_1_caf5e5cb17f4d05fff8c2fab661cd93f._comment
deleted file mode 100644
index 48ec44d..0000000
--- a/doc/bugs/sync_does_not_preserve_timestamps/comment_1_caf5e5cb17f4d05fff8c2fab661cd93f._comment
+++ /dev/null
@@ -1,8 +0,0 @@
-[[!comment format=mdwn
- username="http://joeyh.name/"
- ip="209.250.56.144"
- subject="comment 1"
- date="2014-09-23T20:27:25Z"
- content="""
-The closest git comes to storing a timestamp is the date of the last commit of a file for mtime, and first commit for ctime. However, those are pretty expensive to look up for a given file. And git doesn't try to preserve timestamps in checkouts at all, which argues that git-annex, at least at the command line, should not either.
-"""]]
diff --git a/doc/bugs/sync_does_not_preserve_timestamps/comment_2_c337fca1474b5b78f61ad6f421138ae4._comment b/doc/bugs/sync_does_not_preserve_timestamps/comment_2_c337fca1474b5b78f61ad6f421138ae4._comment
deleted file mode 100644
index 4b5a750..0000000
--- a/doc/bugs/sync_does_not_preserve_timestamps/comment_2_c337fca1474b5b78f61ad6f421138ae4._comment
+++ /dev/null
@@ -1,12 +0,0 @@
-[[!comment format=mdwn
- username="https://www.google.com/accounts/o8/id?id=AItOawmK0703vNSIQsP1mGf-4MAPnsBZiSc6yVo"
- nickname="Emre"
- subject="comment 2"
- date="2014-09-23T20:58:10Z"
- content="""
-Thanks Joey for the comment. 
-
-But when syncing two repos, timestamps are critical at least for my use case. I can't lose this info. Even if it's expensive. 
-
-Appreciate if you can consider to add it for direct mode repos, ie when a file is synced to another repo and created there, it shall carry at least the mtime of the file in source repo. Owncloud sync does it, btsync does it, although I know git-annex is different than those. 
-"""]]
diff --git a/doc/bugs/sync_does_not_preserve_timestamps/comment_3_9a3eeddc46e5a420575f00cb47caf703._comment b/doc/bugs/sync_does_not_preserve_timestamps/comment_3_9a3eeddc46e5a420575f00cb47caf703._comment
deleted file mode 100644
index ba34823..0000000
--- a/doc/bugs/sync_does_not_preserve_timestamps/comment_3_9a3eeddc46e5a420575f00cb47caf703._comment
+++ /dev/null
@@ -1,8 +0,0 @@
-[[!comment format=mdwn
- username="https://www.google.com/accounts/o8/id?id=AItOawmK0703vNSIQsP1mGf-4MAPnsBZiSc6yVo"
- nickname="Emre"
- subject="comment 3"
- date="2014-09-23T21:15:29Z"
- content="""
-Btw, git storing the last commit time as Mtime is not enough, it shall store the original timestamp of the file, not the date of commit. Hope I could explain and hope this is something doable.
-"""]]
diff --git a/doc/bugs/sync_does_not_preserve_timestamps/comment_4_99b064259fc2e3c6eb83c3da3b2d3bac._comment b/doc/bugs/sync_does_not_preserve_timestamps/comment_4_99b064259fc2e3c6eb83c3da3b2d3bac._comment
deleted file mode 100644
index 08de756..0000000
--- a/doc/bugs/sync_does_not_preserve_timestamps/comment_4_99b064259fc2e3c6eb83c3da3b2d3bac._comment
+++ /dev/null
@@ -1,10 +0,0 @@
-[[!comment format=mdwn
- username="http://svario.it/gioele"
- nickname="gioele"
- subject="comment 4"
- date="2014-09-24T07:15:09Z"
- content="""
-You can try to store the timestamps just before commit and restore them on checkout.
-
-Have a look at [metastore](https://github.com/przemoc/metastore): it is a ready-made solution for plain git. Maybe you can adapt it to git-annex.
-"""]]
diff --git a/doc/bugs/sync_does_not_preserve_timestamps/comment_5_c95c8b9bd617830604500213c962fc7a._comment b/doc/bugs/sync_does_not_preserve_timestamps/comment_5_c95c8b9bd617830604500213c962fc7a._comment
deleted file mode 100644
index 7632548..0000000
--- a/doc/bugs/sync_does_not_preserve_timestamps/comment_5_c95c8b9bd617830604500213c962fc7a._comment
+++ /dev/null
@@ -1,9 +0,0 @@
-[[!comment format=mdwn
- username="https://www.google.com/accounts/o8/id?id=AItOawlM_DRhi_5pJrTA0HbApHR25iAgy-NBXTY"
- nickname="Tor Arne"
- subject="comment 5"
- date="2014-10-01T22:02:43Z"
- content="""
-I was just about to start using git-annex for my data when I saw this bug report, which unfortunately is a blocker. Persisting basic metadata of files that are synced seems like a core feature of a file sync/transfer tool, so I'm really hoping this can be solved somehow :/
-
-"""]]
diff --git a/doc/bugs/sync_does_not_preserve_timestamps/comment_6_b99e00d0bc4258c4cb28b544b19ea3b8._comment b/doc/bugs/sync_does_not_preserve_timestamps/comment_6_b99e00d0bc4258c4cb28b544b19ea3b8._comment
deleted file mode 100644
index 67fe255..0000000
--- a/doc/bugs/sync_does_not_preserve_timestamps/comment_6_b99e00d0bc4258c4cb28b544b19ea3b8._comment
+++ /dev/null
@@ -1,12 +0,0 @@
-[[!comment format=mdwn
- username="https://www.google.com/accounts/o8/id?id=AItOawlM_DRhi_5pJrTA0HbApHR25iAgy-NBXTY"
- nickname="Tor Arne"
- subject="comment 6"
- date="2014-10-01T22:39:01Z"
- content="""
-Isn't this what the metadata feature does though? http://git-annex.branchable.com/design/metadata/
-
-With annex.genmetadata true set, it should store year and mont (but not day/time? if so why not?
-
-Is the missing piece of the puzzle to apply the metadata again on checkout?
-"""]]
diff --git a/doc/todo/does_not_preserve_timestamps.mdwn b/doc/todo/does_not_preserve_timestamps.mdwn
new file mode 100644
index 0000000..0d8f237
--- /dev/null
+++ b/doc/todo/does_not_preserve_timestamps.mdwn
@@ -0,0 +1,16 @@
+### Please describe the problem.
+I see that files are synced between my computers with git-annex but the timestamps do not match. The one that receives files always puts the current time of file creation on the file.
+
+### What steps will reproduce the problem?
+Install git-annex on two computers. Connect with XMPP. Then add cloud storage with shared encryption for transferring files. Since you want also backup, choose "full backup" as the type of cloud storage.
+
+
+### What version of git-annex are you using? On what operating system?
+Downloaded binary package dated 13/09/2014 amd64 Ubuntu 14.04.
+
+
+### Please provide any additional information below.
+
+Files are in sync. For example, I move a file from a directory to my synced annex directory. It contains timestamp of 01/01/2010 for example. Once the file gets transferred to the remote computer, it gets current time, for example 20/09/2014 rather than keeping 01/01/2010. 
+
+All computers are linux based, ext4 filesystems. File transfers are done through shared encryption rsync remote.
diff --git a/doc/todo/does_not_preserve_timestamps/comment_1_caf5e5cb17f4d05fff8c2fab661cd93f._comment b/doc/todo/does_not_preserve_timestamps/comment_1_caf5e5cb17f4d05fff8c2fab661cd93f._comment
new file mode 100644
index 0000000..48ec44d
--- /dev/null
+++ b/doc/todo/does_not_preserve_timestamps/comment_1_caf5e5cb17f4d05fff8c2fab661cd93f._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="209.250.56.144"
+ subject="comment 1"
+ date="2014-09-23T20:27:25Z"
+ content="""
+The closest git comes to storing a timestamp is the date of the last commit of a file for mtime, and first commit for ctime. However, those are pretty expensive to look up for a given file. And git doesn't try to preserve timestamps in checkouts at all, which argues that git-annex, at least at the command line, should not either.
+"""]]
diff --git a/doc/todo/does_not_preserve_timestamps/comment_2_c337fca1474b5b78f61ad6f421138ae4._comment b/doc/todo/does_not_preserve_timestamps/comment_2_c337fca1474b5b78f61ad6f421138ae4._comment
new file mode 100644
index 0000000..4b5a750
--- /dev/null
+++ b/doc/todo/does_not_preserve_timestamps/comment_2_c337fca1474b5b78f61ad6f421138ae4._comment
@@ -0,0 +1,12 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawmK0703vNSIQsP1mGf-4MAPnsBZiSc6yVo"
+ nickname="Emre"
+ subject="comment 2"
+ date="2014-09-23T20:58:10Z"
+ content="""
+Thanks Joey for the comment. 
+
+But when syncing two repos, timestamps are critical at least for my use case. I can't lose this info. Even if it's expensive. 
+
+Appreciate if you can consider to add it for direct mode repos, ie when a file is synced to another repo and created there, it shall carry at least the mtime of the file in source repo. Owncloud sync does it, btsync does it, although I know git-annex is different than those. 
+"""]]
diff --git a/doc/todo/does_not_preserve_timestamps/comment_3_9a3eeddc46e5a420575f00cb47caf703._comment b/doc/todo/does_not_preserve_timestamps/comment_3_9a3eeddc46e5a420575f00cb47caf703._comment
new file mode 100644
index 0000000..ba34823
--- /dev/null
+++ b/doc/todo/does_not_preserve_timestamps/comment_3_9a3eeddc46e5a420575f00cb47caf703._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawmK0703vNSIQsP1mGf-4MAPnsBZiSc6yVo"
+ nickname="Emre"
+ subject="comment 3"
+ date="2014-09-23T21:15:29Z"
+ content="""
+Btw, git storing the last commit time as Mtime is not enough, it shall store the original timestamp of the file, not the date of commit. Hope I could explain and hope this is something doable.
+"""]]
diff --git a/doc/todo/does_not_preserve_timestamps/comment_4_99b064259fc2e3c6eb83c3da3b2d3bac._comment b/doc/todo/does_not_preserve_timestamps/comment_4_99b064259fc2e3c6eb83c3da3b2d3bac._comment
new file mode 100644
index 0000000..08de756
--- /dev/null
+++ b/doc/todo/does_not_preserve_timestamps/comment_4_99b064259fc2e3c6eb83c3da3b2d3bac._comment
@@ -0,0 +1,10 @@
+[[!comment format=mdwn
+ username="http://svario.it/gioele"
+ nickname="gioele"
+ subject="comment 4"
+ date="2014-09-24T07:15:09Z"
+ content="""
+You can try to store the timestamps just before commit and restore them on checkout.
+
+Have a look at [metastore](https://github.com/przemoc/metastore): it is a ready-made solution for plain git. Maybe you can adapt it to git-annex.

(Diff truncated)
Added a comment
diff --git a/doc/bugs/rsync_remote_is_not_working/comment_1_8998edf856a411de1f90b27568628feb._comment b/doc/bugs/rsync_remote_is_not_working/comment_1_8998edf856a411de1f90b27568628feb._comment
new file mode 100644
index 0000000..50f0c06
--- /dev/null
+++ b/doc/bugs/rsync_remote_is_not_working/comment_1_8998edf856a411de1f90b27568628feb._comment
@@ -0,0 +1,20 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="209.250.56.96"
+ subject="comment 1"
+ date="2014-10-21T20:07:40Z"
+ content="""
+A \"small archive\" only wants to contain files that are located inside archive/ directories.
+
+That seems to explain everything you reported except for:
+
+> 6. but the sizes are really small, seems that the actual files are not being transferred
+
+Maybe the remote is configured to use chunking? What happens if you run `git annex fsck --from $remotename` after copying a file to it? Any problem detected?
+
+> The add remote interface stops at \"check remote\" prompt for a long time without completing
+
+Please explain exactly what you did in the webapp. What did you click on, and what did you enter? I need enough detail to be able to reproduce the problem.
+
+(Also, in the future, one problem per bug report turns out to be a lot less confusing, and have better results all around. True here and really anywhere..)
+"""]]

Added a comment
diff --git a/doc/bugs/vicfg_and_description_often_not_propagated/comment_2_d56aed617e0791aa17d9f37c8d3fd317._comment b/doc/bugs/vicfg_and_description_often_not_propagated/comment_2_d56aed617e0791aa17d9f37c8d3fd317._comment
new file mode 100644
index 0000000..cb48536
--- /dev/null
+++ b/doc/bugs/vicfg_and_description_often_not_propagated/comment_2_d56aed617e0791aa17d9f37c8d3fd317._comment
@@ -0,0 +1,12 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="209.250.56.96"
+ subject="comment 2"
+ date="2014-10-21T20:02:40Z"
+ content="""
+Can you please provide more information, like showing the commits made to the git-annex branch when the configuration was reverted?
+
+Also, might some of the clocks of computers where you're using git-annex be set wrong?
+
+I have tagged this report moreinfo because I don't have enough information to do anything else.
+"""]]

moreinfo
diff --git a/doc/bugs/vicfg_and_description_often_not_propagated.mdwn b/doc/bugs/vicfg_and_description_often_not_propagated.mdwn
index d42ba43..7e6dd92 100644
--- a/doc/bugs/vicfg_and_description_often_not_propagated.mdwn
+++ b/doc/bugs/vicfg_and_description_often_not_propagated.mdwn
@@ -150,3 +150,5 @@ wanted a6febfa0-9fe5-4a65-95bb-dc255d87c2e2 = standard
 #schedule a6febfa0-9fe5-4a65-95bb-dc255d87c2e2 =
 # End of transcript or log.
 """]]
+
+[[!tag moreinfo]]

Added a comment
diff --git a/doc/bugs/get_from_glacier_fails_too_early/comment_5_488bb44796e6a4e16f7bfc1f229233e7._comment b/doc/bugs/get_from_glacier_fails_too_early/comment_5_488bb44796e6a4e16f7bfc1f229233e7._comment
new file mode 100644
index 0000000..c67f602
--- /dev/null
+++ b/doc/bugs/get_from_glacier_fails_too_early/comment_5_488bb44796e6a4e16f7bfc1f229233e7._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="209.250.56.96"
+ subject="comment 5"
+ date="2014-10-21T19:59:06Z"
+ content="""
+Recent autobuilds will also print out some useful info when you run `git annex info glacier`, including where it's getting the AWS credentials from.
+"""]]

close
diff --git a/doc/bugs/get_from_glacier_fails_too_early.mdwn b/doc/bugs/get_from_glacier_fails_too_early.mdwn
index 82594c1..4892403 100644
--- a/doc/bugs/get_from_glacier_fails_too_early.mdwn
+++ b/doc/bugs/get_from_glacier_fails_too_early.mdwn
@@ -67,3 +67,6 @@ with no noticeable change.
 I had changed the AWS credentials a while ago.
 
 Tomorrow I will try to download a just recently uploaded file with the current credentials and keys.
+
+> [[done]];  I am not confident that I understand this failure on retrival,
+> and that I've fixed it.  --[[Joey]]

devblog
diff --git a/doc/devblog/day_227__info.mdwn b/doc/devblog/day_227__info.mdwn
new file mode 100644
index 0000000..0b5950f
--- /dev/null
+++ b/doc/devblog/day_227__info.mdwn
@@ -0,0 +1,33 @@
+Today, I've expanded `git annex info` to also be able to be used on annexed files
+and on remotes. Looking at the info for an individual remote is quite
+useful, especially for answering questions like: Does the remote have
+embedded creds? Are they encrypted? Does it use chunking? Is that old style
+chunking?
+
+<pre>
+remote: rsync.net
+description: rsync.net demo remote
+uuid: 15b42f18-ebf2-11e1-bea1-f71f1515f9f1
+cost: 250.0
+type: rsync
+url: xxx@usw-s002.rsync.net:foo
+encryption: encrypted (to gpg keys: 7321FC22AC211D23 C910D9222512E3C7)
+chunking: 1 MB chunks
+</pre>
+
+<pre>
+remote: ia3
+description: test [ia3]
+uuid: 12817311-a189-4de3-b806-5f339d304230
+cost: 200.0
+type: S3
+creds: embedded in git repository (not encrypted)
+bucket: joeyh-test-17oct-3
+internet archive item: http://archive.org/details/joeyh-test-17oct-3
+encryption: not encrypted
+chunking: none
+</pre>
+
+Should be quite useful info for debugging too..
+
+Yesterday, I fixed a bug that prevented retrieving files from Glacier.

add per-remote-type info
Now `git annex info $remote` shows info specific to the type of the remote,
for example, it shows the rsync url.
Remote types that support encryption or chunking also include that in their
info.
This commit was sponsored by Ævar Arnfjörð Bjarmason.
diff --git a/Command/Info.hs b/Command/Info.hs
index 5cac295..96b7eb6 100644
--- a/Command/Info.hs
+++ b/Command/Info.hs
@@ -125,7 +125,8 @@ fileInfo file k = showCustom (unwords ["info", file]) $ do
 
 remoteInfo :: Remote -> Annex ()
 remoteInfo r = showCustom (unwords ["info", Remote.name r]) $ do
-	evalStateT (mapM_ showStat (remote_stats r)) emptyStatInfo
+	info <- map (\(k, v) -> simpleStat k (pure v)) <$> Remote.getInfo r
+	evalStateT (mapM_ showStat (remote_stats r ++ info)) emptyStatInfo
 	return True
 
 selStats :: [Stat] -> [Stat] -> Annex [Stat]
@@ -179,16 +180,21 @@ file_stats f k =
 	]
 
 remote_stats :: Remote -> [Stat]
-remote_stats r =
-	[ remote_name r
-	, remote_description r
-	, remote_uuid r
-	, remote_cost r
+remote_stats r = map (\s -> s r)
+	[ remote_name
+	, remote_description
+	, remote_uuid
+	, remote_cost
+	, remote_type
 	]
 
 stat :: String -> (String -> StatState String) -> Stat
 stat desc a = return $ Just (desc, a desc)
 
+-- The json simply contains the same string that is displayed.
+simpleStat :: String -> StatState String -> Stat
+simpleStat desc getval = stat desc $ json id getval
+
 nostat :: Stat
 nostat = return Nothing
 
@@ -209,7 +215,7 @@ showStat s = maybe noop calc =<< s
 		lift . showRaw =<< a
 
 repository_mode :: Stat
-repository_mode = stat "repository mode" $ json id $ lift $
+repository_mode = simpleStat "repository mode" $ lift $
 	ifM isDirect 
 		( return "direct", return "indirect" )
 
@@ -223,32 +229,36 @@ remote_list level = stat n $ nojson $ lift $ do
 	n = showTrustLevel level ++ " repositories"
 	
 dir_name :: FilePath -> Stat
-dir_name dir = stat "directory" $ json id $ pure dir
+dir_name dir = simpleStat "directory" $ pure dir
 
 file_name :: FilePath -> Stat
-file_name file = stat "file" $ json id $ pure file
+file_name file = simpleStat "file" $ pure file
 
 remote_name :: Remote -> Stat
-remote_name r = stat "remote" $ json id $ pure (Remote.name r)
+remote_name r = simpleStat "remote" $ pure (Remote.name r)
 
 remote_description :: Remote -> Stat
-remote_description r = stat "description" $ json id $ lift $
+remote_description r = simpleStat "description" $ lift $
 	Remote.prettyUUID (Remote.uuid r)
 
 remote_uuid :: Remote -> Stat
-remote_uuid r = stat "uuid" $ json id $ pure $
+remote_uuid r = simpleStat "uuid" $ pure $
 	fromUUID $ Remote.uuid r
 
 remote_cost :: Remote -> Stat
-remote_cost r = stat "cost" $ json id $ pure $
+remote_cost r = simpleStat "cost" $ pure $
 	show $ Remote.cost r
 
+remote_type :: Remote -> Stat
+remote_type r = simpleStat "type" $ pure $
+	Remote.typename $ Remote.remotetype r
+
 local_annex_keys :: Stat
 local_annex_keys = stat "local annex keys" $ json show $
 	countKeys <$> cachedPresentData
 
 local_annex_size :: Stat
-local_annex_size = stat "local annex size" $ json id $
+local_annex_size = simpleStat "local annex size" $
 	showSizeKeys <$> cachedPresentData
 
 known_annex_files :: Stat
@@ -256,7 +266,7 @@ known_annex_files = stat "annexed files in working tree" $ json show $
 	countKeys <$> cachedReferencedData
 
 known_annex_size :: Stat
-known_annex_size = stat "size of annexed files in working tree" $ json id $
+known_annex_size = simpleStat "size of annexed files in working tree" $
 	showSizeKeys <$> cachedReferencedData
 
 tmp_size :: Stat
@@ -266,13 +276,13 @@ bad_data_size :: Stat
 bad_data_size = staleSize "bad keys size" gitAnnexBadDir
 
 key_size :: Key -> Stat
-key_size k = stat "size" $ json id $ pure $ showSizeKeys $ foldKeys [k]
+key_size k = simpleStat "size" $ pure $ showSizeKeys $ foldKeys [k]
 
 key_name :: Key -> Stat
-key_name k = stat "key" $ json id $ pure $ key2file k
+key_name k = simpleStat "key" $ pure $ key2file k
 
 bloom_info :: Stat
-bloom_info = stat "bloom filter size" $ json id $ do
+bloom_info = simpleStat "bloom filter size" $ do
 	localkeys <- countKeys <$> cachedPresentData
 	capacity <- fromIntegral <$> lift Command.Unused.bloomCapacity
 	let note = aside $
@@ -305,7 +315,7 @@ transfer_list = stat "transfers in progress" $ nojson $ lift $ do
 		]
 
 disk_size :: Stat
-disk_size = stat "available local disk space" $ json id $ lift $
+disk_size = simpleStat "available local disk space" $ lift $
 	calcfree
 		<$> (annexDiskReserve <$> Annex.getGitConfig)
 		<*> inRepo (getDiskFree . gitAnnexDir)
diff --git a/Remote/Bup.hs b/Remote/Bup.hs
index cc64d6f..4f2ddf3 100644
--- a/Remote/Bup.hs
+++ b/Remote/Bup.hs
@@ -73,6 +73,7 @@ gen r u c gc = do
 		, availability = if bupLocal buprepo then LocallyAvailable else GloballyAvailable
 		, readonly = False
 		, mkUnavailable = return Nothing
+		, getInfo = return [("repo", buprepo)]
 		}
 	return $ Just $ specialRemote' specialcfg c
 		(simplyPrepare $ store this buprepo)
diff --git a/Remote/Ddar.hs b/Remote/Ddar.hs
index 1db482b..d73919b 100644
--- a/Remote/Ddar.hs
+++ b/Remote/Ddar.hs
@@ -70,6 +70,7 @@ gen r u c gc = do
 		, availability = if ddarLocal ddarrepo then LocallyAvailable else GloballyAvailable
 		, readonly = False
 		, mkUnavailable = return Nothing
+		, getInfo = return [("repo", ddarrepo)]
 		}
 	ddarrepo = fromMaybe (error "missing ddarrepo") $ remoteAnnexDdarRepo gc
 	specialcfg = (specialRemoteCfg c)
diff --git a/Remote/Directory.hs b/Remote/Directory.hs
index fa4d027..2e9e013 100644
--- a/Remote/Directory.hs
+++ b/Remote/Directory.hs
@@ -67,7 +67,8 @@ gen r u c gc = do
 			availability = LocallyAvailable,
 			remotetype = remote,
 			mkUnavailable = gen r u c $
-				gc { remoteAnnexDirectory = Just "/dev/null" }
+				gc { remoteAnnexDirectory = Just "/dev/null" },
+			getInfo = return [("directory", dir)]
 		}
   where
 	dir = fromMaybe (error "missing directory") $ remoteAnnexDirectory gc
diff --git a/Remote/External.hs b/Remote/External.hs
index d409724..e907ab0 100644
--- a/Remote/External.hs
+++ b/Remote/External.hs
@@ -68,6 +68,7 @@ gen r u c gc = do
 			remotetype = remote,
 			mkUnavailable = gen r u c $
 				gc { remoteAnnexExternalType = Just "!dne!" }
+			, getInfo = return [("externaltype", externaltype)]
 		}
   where
 	externaltype = fromMaybe (error "missing externaltype") (remoteAnnexExternalType gc)
diff --git a/Remote/GCrypt.hs b/Remote/GCrypt.hs
index fc7718a..995c3e8 100644
--- a/Remote/GCrypt.hs
+++ b/Remote/GCrypt.hs
@@ -121,6 +121,7 @@ gen' r u c gc = do
 		, availability = availabilityCalc r
 		, remotetype = remote
 		, mkUnavailable = return Nothing
+		, getInfo = return $ gitRepoInfo r
 	}
 	return $ Just $ specialRemote' specialcfg c
 		(simplyPrepare $ store this rsyncopts)
diff --git a/Remote/Git.hs b/Remote/Git.hs
index a249f43..50c34a2 100644
--- a/Remote/Git.hs
+++ b/Remote/Git.hs
@@ -159,6 +159,7 @@ gen r u c gc
 			, availability = availabilityCalc r
 			, remotetype = remote
 			, mkUnavailable = unavailable r u c gc
+			, getInfo = return $ gitRepoInfo r

(Diff truncated)
Added a comment
diff --git a/doc/bugs/Upload_to_S3_fails_/comment_8_841fd94d0f599c71a76fd22b07944366._comment b/doc/bugs/Upload_to_S3_fails_/comment_8_841fd94d0f599c71a76fd22b07944366._comment
new file mode 100644
index 0000000..61e201c
--- /dev/null
+++ b/doc/bugs/Upload_to_S3_fails_/comment_8_841fd94d0f599c71a76fd22b07944366._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawkvSZ1AFJdY_1FeutZr_KWeqtzjZta1PNE"
+ nickname="Thedward"
+ subject="comment 8"
+ date="2014-10-21T17:47:35Z"
+ content="""
+Additional info: I created both of the related git-annex repositories yesterday via the webapp. Then imported a number of files to each one. Then connected them via xmpp. Then created the S3 remote via the webapp so they could actually share files. I am using an IAM identity for S3 instead of my root access key; it has full S3 access (and data IS showing up in the bucket, so it's not a *simple* permissions problem).
+"""]]

info: When passed the name or uuid of a remote, displays info about that remote.
No per-remote-type info yet.
This commit was sponsored by Stanley Yamane.
diff --git a/CmdLine/Usage.hs b/CmdLine/Usage.hs
index 6e0a1ca..1998a5f 100644
--- a/CmdLine/Usage.hs
+++ b/CmdLine/Usage.hs
@@ -103,6 +103,8 @@ paramSize :: String
 paramSize = "SIZE"
 paramAddress :: String
 paramAddress = "ADDRESS"
+paramItem :: String
+paramItem = "ITEM"
 paramKeyValue :: String
 paramKeyValue = "K=V"
 paramNothing :: String
diff --git a/Command/Info.hs b/Command/Info.hs
index ffa6a59..5cac295 100644
--- a/Command/Info.hs
+++ b/Command/Info.hs
@@ -16,10 +16,11 @@ import Data.Tuple
 import Data.Ord
 
 import Common.Annex
-import qualified Remote
 import qualified Command.Unused
 import qualified Git
 import qualified Annex
+import qualified Remote
+import qualified Types.Remote as Remote
 import Command
 import Utility.DataUnits
 import Utility.DiskFree
@@ -75,7 +76,7 @@ type StatState = StateT StatInfo Annex
 
 cmd :: [Command]
 cmd = [noCommit $ dontCheck repoExists $ withOptions [jsonOption] $
-	command "info" paramPaths seek SectionQuery
+	command "info" (paramOptional $ paramRepeating paramItem) seek SectionQuery
 	"shows information about the specified item or the repository as a whole"]
 
 seek :: CommandSeek
@@ -99,11 +100,15 @@ globalInfo = do
 itemInfo :: String -> Annex ()
 itemInfo p = ifM (isdir p)
 	( dirInfo p
-	, maybe noinfo (fileInfo p) =<< isAnnexLink p
+	, do
+		v <- Remote.byName' p
+		case v of
+			Right r -> remoteInfo r
+			Left _ -> maybe noinfo (fileInfo p) =<< isAnnexLink p
 	)
   where
 	isdir = liftIO . catchBoolIO . (isDirectory <$$> getFileStatus)
-	noinfo = error $ p ++ " is not a directory or an annexed file"
+	noinfo = error $ p ++ " is not a directory or an annexed file or a remote"
 
 dirInfo :: FilePath -> Annex ()
 dirInfo dir = showCustom (unwords ["info", dir]) $ do
@@ -118,6 +123,11 @@ fileInfo file k = showCustom (unwords ["info", file]) $ do
 	evalStateT (mapM_ showStat (file_stats file k)) emptyStatInfo
 	return True
 
+remoteInfo :: Remote -> Annex ()
+remoteInfo r = showCustom (unwords ["info", Remote.name r]) $ do
+	evalStateT (mapM_ showStat (remote_stats r)) emptyStatInfo
+	return True
+
 selStats :: [Stat] -> [Stat] -> Annex [Stat]
 selStats fast_stats slow_stats = do
 	fast <- Annex.getState Annex.fast
@@ -150,7 +160,7 @@ global_slow_stats =
 	]
 dir_fast_stats :: [FilePath -> Stat]
 dir_fast_stats =
-	[ local_dir
+	[ dir_name
 	, const local_annex_keys
 	, const local_annex_size
 	, const known_annex_files
@@ -163,11 +173,19 @@ dir_slow_stats =
 
 file_stats :: FilePath -> Key -> [Stat]
 file_stats f k =
-	[ local_file f
+	[ file_name f
 	, key_size k
 	, key_name k
 	]
 
+remote_stats :: Remote -> [Stat]
+remote_stats r =
+	[ remote_name r
+	, remote_description r
+	, remote_uuid r
+	, remote_cost r
+	]
+
 stat :: String -> (String -> StatState String) -> Stat
 stat desc a = return $ Just (desc, a desc)
 
@@ -204,11 +222,26 @@ remote_list level = stat n $ nojson $ lift $ do
   where
 	n = showTrustLevel level ++ " repositories"
 	
-local_dir :: FilePath -> Stat
-local_dir dir = stat "directory" $ json id $ return dir
+dir_name :: FilePath -> Stat
+dir_name dir = stat "directory" $ json id $ pure dir
+
+file_name :: FilePath -> Stat
+file_name file = stat "file" $ json id $ pure file
+
+remote_name :: Remote -> Stat
+remote_name r = stat "remote" $ json id $ pure (Remote.name r)
+
+remote_description :: Remote -> Stat
+remote_description r = stat "description" $ json id $ lift $
+	Remote.prettyUUID (Remote.uuid r)
+
+remote_uuid :: Remote -> Stat
+remote_uuid r = stat "uuid" $ json id $ pure $
+	fromUUID $ Remote.uuid r
 
-local_file :: FilePath -> Stat
-local_file file = stat "file" $ json id $ return file
+remote_cost :: Remote -> Stat
+remote_cost r = stat "cost" $ json id $ pure $
+	show $ Remote.cost r
 
 local_annex_keys :: Stat
 local_annex_keys = stat "local annex keys" $ json show $
diff --git a/debian/changelog b/debian/changelog
index 6b3b59b..3527753 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -13,6 +13,8 @@ git-annex (5.20141014) UNRELEASED; urgency=medium
   * glacier: Fix pipe setup when calling glacier-cli to retrieve an object.
   * info: When run on a single annexed file, displays some info about the 
     file, including its key and size.
+  * info: When passed the name or uuid of a remote, displays info about that
+    remote.
 
  -- Joey Hess <joeyh@debian.org>  Tue, 14 Oct 2014 14:09:24 -0400
 
diff --git a/doc/git-annex.mdwn b/doc/git-annex.mdwn
index 95d8e14..7df4ecb 100644
--- a/doc/git-annex.mdwn
+++ b/doc/git-annex.mdwn
@@ -676,10 +676,12 @@ subdirectories).
   To generate output suitable for the gource visualization program,
   specify `--gource`.
 
-* `info [directory|file ...]`
+* `info [directory|file|remote ...]`
 
   Displays statistics and other information for the specified item,
-  or if none is specified, for the repository as a whole.
+  which can be a directory, or a file, or a remote (specified by name or
+  UUID). When no item is specified, displays statistics and information
+  for the repository as a whole.
 
   When a directory is specified, the file matching options can be used
   to select the files in the directory that are included in the statistics.

Added a comment
diff --git a/doc/bugs/Upload_to_S3_fails_/comment_7_32685258748a7cdd177e7af2105f128e._comment b/doc/bugs/Upload_to_S3_fails_/comment_7_32685258748a7cdd177e7af2105f128e._comment
new file mode 100644
index 0000000..4d66552
--- /dev/null
+++ b/doc/bugs/Upload_to_S3_fails_/comment_7_32685258748a7cdd177e7af2105f128e._comment
@@ -0,0 +1,10 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawkvSZ1AFJdY_1FeutZr_KWeqtzjZta1PNE"
+ nickname="Thedward"
+ subject="comment 7"
+ date="2014-10-21T17:35:16Z"
+ content="""
+It is running the new style chunking (chunk=1MiB).
+
+It does not appear to resume when it tries again. If I try copying a file to the remote from the command line, it always starts at 0% and dies at some point before 100% even if it has tried to copy that file before.
+"""]]

info: When run on a single annexed file, displays some info about the file, including its key and size.
diff --git a/Command/Info.hs b/Command/Info.hs
index 68ac607..ffa6a59 100644
--- a/Command/Info.hs
+++ b/Command/Info.hs
@@ -1,6 +1,6 @@
 {- git-annex command
  -
- - Copyright 2011 Joey Hess <joey@kitenet.net>
+ - Copyright 2011-2014 Joey Hess <joey@kitenet.net>
  -
  - Licensed under the GNU GPL version 3 or higher.
  -}
@@ -24,6 +24,7 @@ import Command
 import Utility.DataUnits
 import Utility.DiskFree
 import Annex.Content
+import Annex.Link
 import Types.Key
 import Logs.UUID
 import Logs.Trust
@@ -65,6 +66,9 @@ data StatInfo = StatInfo
 	, referencedData :: Maybe KeyData
 	, numCopiesStats :: Maybe NumCopiesStats
 	}
+		
+emptyStatInfo :: StatInfo
+emptyStatInfo = StatInfo Nothing Nothing Nothing
 
 -- a state monad for running Stats in
 type StatState = StateT StatInfo Annex
@@ -72,36 +76,48 @@ type StatState = StateT StatInfo Annex
 cmd :: [Command]
 cmd = [noCommit $ dontCheck repoExists $ withOptions [jsonOption] $
 	command "info" paramPaths seek SectionQuery
-	"shows general information about the annex"]
+	"shows information about the specified item or the repository as a whole"]
 
 seek :: CommandSeek
 seek = withWords start
 
-start :: [FilePath] -> CommandStart
+start :: [String] -> CommandStart
 start [] = do
 	globalInfo
 	stop
 start ps = do
-	mapM_ localInfo =<< filterM isdir ps
+	mapM_ itemInfo ps
 	stop
-  where
-	isdir = liftIO . catchBoolIO . (isDirectory <$$> getFileStatus)
 
 globalInfo :: Annex ()
 globalInfo = do
 	stats <- selStats global_fast_stats global_slow_stats
 	showCustom "info" $ do
-		evalStateT (mapM_ showStat stats) (StatInfo Nothing Nothing Nothing)
+		evalStateT (mapM_ showStat stats) emptyStatInfo
 		return True
 
-localInfo :: FilePath -> Annex ()
-localInfo dir = showCustom (unwords ["info", dir]) $ do
-	stats <- selStats (tostats local_fast_stats) (tostats local_slow_stats)
-	evalStateT (mapM_ showStat stats) =<< getLocalStatInfo dir
+itemInfo :: String -> Annex ()
+itemInfo p = ifM (isdir p)
+	( dirInfo p
+	, maybe noinfo (fileInfo p) =<< isAnnexLink p
+	)
+  where
+	isdir = liftIO . catchBoolIO . (isDirectory <$$> getFileStatus)
+	noinfo = error $ p ++ " is not a directory or an annexed file"
+
+dirInfo :: FilePath -> Annex ()
+dirInfo dir = showCustom (unwords ["info", dir]) $ do
+	stats <- selStats (tostats dir_fast_stats) (tostats dir_slow_stats)
+	evalStateT (mapM_ showStat stats) =<< getDirStatInfo dir
 	return True
   where
 	tostats = map (\s -> s dir)
 
+fileInfo :: FilePath -> Key -> Annex ()
+fileInfo file k = showCustom (unwords ["info", file]) $ do
+	evalStateT (mapM_ showStat (file_stats file k)) emptyStatInfo
+	return True
+
 selStats :: [Stat] -> [Stat] -> Annex [Stat]
 selStats fast_stats slow_stats = do
 	fast <- Annex.getState Annex.fast
@@ -132,19 +148,26 @@ global_slow_stats =
 	, bloom_info
 	, backend_usage
 	]
-local_fast_stats :: [FilePath -> Stat]
-local_fast_stats =
+dir_fast_stats :: [FilePath -> Stat]
+dir_fast_stats =
 	[ local_dir
 	, const local_annex_keys
 	, const local_annex_size
 	, const known_annex_files
 	, const known_annex_size
 	]
-local_slow_stats :: [FilePath -> Stat]
-local_slow_stats =
+dir_slow_stats :: [FilePath -> Stat]
+dir_slow_stats =
 	[ const numcopies_stats
 	]
 
+file_stats :: FilePath -> Key -> [Stat]
+file_stats f k =
+	[ local_file f
+	, key_size k
+	, key_name k
+	]
+
 stat :: String -> (String -> StatState String) -> Stat
 stat desc a = return $ Just (desc, a desc)
 
@@ -184,6 +207,9 @@ remote_list level = stat n $ nojson $ lift $ do
 local_dir :: FilePath -> Stat
 local_dir dir = stat "directory" $ json id $ return dir
 
+local_file :: FilePath -> Stat
+local_file file = stat "file" $ json id $ return file
+
 local_annex_keys :: Stat
 local_annex_keys = stat "local annex keys" $ json show $
 	countKeys <$> cachedPresentData
@@ -206,6 +232,12 @@ tmp_size = staleSize "temporary object directory size" gitAnnexTmpObjectDir
 bad_data_size :: Stat
 bad_data_size = staleSize "bad keys size" gitAnnexBadDir
 
+key_size :: Key -> Stat
+key_size k = stat "size" $ json id $ pure $ showSizeKeys $ foldKeys [k]
+
+key_name :: Key -> Stat
+key_name k = stat "key" $ json id $ pure $ key2file k
+
 bloom_info :: Stat
 bloom_info = stat "bloom filter size" $ json id $ do
 	localkeys <- countKeys <$> cachedPresentData
@@ -296,12 +328,12 @@ cachedReferencedData = do
 			put s { referencedData = Just v }
 			return v
 
--- currently only available for local info
+-- currently only available for directory info
 cachedNumCopiesStats :: StatState (Maybe NumCopiesStats)
 cachedNumCopiesStats = numCopiesStats <$> get
 
-getLocalStatInfo :: FilePath -> Annex StatInfo
-getLocalStatInfo dir = do
+getDirStatInfo :: FilePath -> Annex StatInfo
+getDirStatInfo dir = do
 	fast <- Annex.getState Annex.fast
 	matcher <- Limit.getMatcher
 	(presentdata, referenceddata, numcopiesstats) <-
diff --git a/debian/changelog b/debian/changelog
index c37c303..6b3b59b 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -11,6 +11,8 @@ git-annex (5.20141014) UNRELEASED; urgency=medium
     making git-annex not re-exec itself on start on windows, and making the
     test suite on Windows run tests without forking.
   * glacier: Fix pipe setup when calling glacier-cli to retrieve an object.
+  * info: When run on a single annexed file, displays some info about the 
+    file, including its key and size.
 
  -- Joey Hess <joeyh@debian.org>  Tue, 14 Oct 2014 14:09:24 -0400
 
diff --git a/doc/git-annex.mdwn b/doc/git-annex.mdwn
index 011b6d9..95d8e14 100644
--- a/doc/git-annex.mdwn
+++ b/doc/git-annex.mdwn
@@ -676,17 +676,15 @@ subdirectories).
   To generate output suitable for the gource visualization program,
   specify `--gource`.
 
-* `info [directory ...]`
+* `info [directory|file ...]`
 
-  Displays some statistics and other information, including how much data
-  is in the annex and a list of all known repositories.
+  Displays statistics and other information for the specified item,
+  or if none is specified, for the repository as a whole.
 
-  To only show the data that can be gathered quickly, use `--fast`.
+  When a directory is specified, the file matching options can be used
+  to select the files in the directory that are included in the statistics.
 
-  When a directory is specified, shows a differently formatted info
-  display for that directory. In this mode, all of the matching
-  options can be used to filter the files that will be included in
-  the information.
+  To only show the data that can be gathered quickly, use `--fast`.
 
   For example, suppose you want to run "git annex get .", but
   would first like to see how much disk space that will use.

comment
diff --git a/doc/todo/show_readonly_removable_drives_in_the_webapp/comment_1_c41140289f9b062e96cfd5d9d5382155._comment b/doc/todo/show_readonly_removable_drives_in_the_webapp/comment_1_c41140289f9b062e96cfd5d9d5382155._comment
new file mode 100644
index 0000000..faa49bf
--- /dev/null
+++ b/doc/todo/show_readonly_removable_drives_in_the_webapp/comment_1_c41140289f9b062e96cfd5d9d5382155._comment
@@ -0,0 +1,15 @@
+[[!comment format=mdwn
+ username="joey"
+ subject="""comment 1"""
+ date="2014-10-21T16:33:25Z"
+ content="""
+The webapp only shows drives the user can write to, because
+in general, there are a vast number of mounted things in modern
+OS's that the user would be very puzzled to see listed as removable
+drives. Such as tmpfs and cgroup mount points, and efi boot partitions.
+Complicating the webapp with knowledge to filter such things out would be a
+constantly losing battle.
+
+I guess it would be ok to add a "not listed here?" link in the webapp
+that allowed chosing from a full list or entering the path by hand.
+"""]]

comment
diff --git a/doc/bugs/get_from_glacier_fails_too_early/comment_4_a20b46a5e9c1c72a484962f3539d3b3e._comment b/doc/bugs/get_from_glacier_fails_too_early/comment_4_a20b46a5e9c1c72a484962f3539d3b3e._comment
new file mode 100644
index 0000000..c46042d
--- /dev/null
+++ b/doc/bugs/get_from_glacier_fails_too_early/comment_4_a20b46a5e9c1c72a484962f3539d3b3e._comment
@@ -0,0 +1,7 @@
+[[!comment format=mdwn
+ username="joey"
+ subject="""comment 4"""
+ date="2014-10-21T16:31:33Z"
+ content="""
+http://git-annex.branchable.com/install/Linux_standalone/
+"""]]