Recent changes to this wiki:

make sync update adjusted branch to hide/unhide
This completes initial support for --hide-missing, although the
assistant still needs to be updated and it perhaps needs to be sped up,
and maybe there needs to be a way for git-annex get to operate on
missing files. Opened some more todos for those things.
This commit was sponsored by Henrik Riomar.
diff --git a/Annex/AdjustedBranch.hs b/Annex/AdjustedBranch.hs
index be60139ea..81556794b 100644
--- a/Annex/AdjustedBranch.hs
+++ b/Annex/AdjustedBranch.hs
@@ -19,9 +19,10 @@ module Annex.AdjustedBranch (
 	fromAdjustedBranch,
 	getAdjustment,
 	enterAdjustedBranch,
+	updateAdjustedBranch,
 	adjustBranch,
 	adjustToCrippledFileSystem,
-	updateAdjustedBranch,
+	mergeToAdjustedBranch,
 	propigateAdjustedCommits,
 	AdjustedClone(..),
 	checkAdjustedClone,
@@ -150,7 +151,7 @@ enterAdjustedBranch :: Adjustment -> Annex Bool
 enterAdjustedBranch adj = inRepo Git.Branch.current >>= \case
 	Just currbranch -> case getAdjustment currbranch of
 		Just curradj | curradj == adj ->
-			reenterAdjustedBranch adj currbranch
+			updateAdjustedBranch adj (AdjBranch currbranch)
 				(fromAdjustedBranch currbranch)
 		_ -> go currbranch
 	Nothing -> do
@@ -197,8 +198,8 @@ checkoutAdjustedBranch (AdjBranch b) checkoutparams = do
  - deleting and rebuilding the adjusted branch, and then checking it out.
  - But, it can be implemented more efficiently than that.
  -}
-reenterAdjustedBranch :: Adjustment -> Branch -> OrigBranch -> Annex Bool
-reenterAdjustedBranch adj@(PresenceAdjustment _ _) currbranch origbranch = do
+updateAdjustedBranch :: Adjustment -> AdjBranch -> OrigBranch -> Annex Bool
+updateAdjustedBranch adj@(PresenceAdjustment _ _) (AdjBranch currbranch) origbranch = do
 	b <- preventCommits $ \commitlck -> do
 		-- Avoid losing any commits that the adjusted branch has that
 		-- have not yet been propigated back to the origbranch.
@@ -319,8 +320,8 @@ findAdjustingCommit (AdjBranch b) = go =<< catCommit b
 {- Update the currently checked out adjusted branch, merging the provided
  - branch into it. Note that the provided branch should be a non-adjusted
  - branch. -}
-updateAdjustedBranch :: Branch -> (OrigBranch, Adjustment) -> [Git.Merge.MergeConfig] -> Annex Bool -> Git.Branch.CommitMode -> Annex Bool
-updateAdjustedBranch tomerge (origbranch, adj) mergeconfig canresolvemerge commitmode = catchBoolIO $
+mergeToAdjustedBranch :: Branch -> (OrigBranch, Adjustment) -> [Git.Merge.MergeConfig] -> Annex Bool -> Git.Branch.CommitMode -> Annex Bool
+mergeToAdjustedBranch tomerge (origbranch, adj) mergeconfig canresolvemerge commitmode = catchBoolIO $
 	join $ preventCommits go
   where
 	adjbranch@(AdjBranch currbranch) = originalToAdjusted origbranch adj
diff --git a/Assistant/Threads/Committer.hs b/Assistant/Threads/Committer.hs
index 4439667ec..1605ff6d0 100644
--- a/Assistant/Threads/Committer.hs
+++ b/Assistant/Threads/Committer.hs
@@ -229,7 +229,7 @@ commitStaged msg = do
 		Right _ -> do
 			ok <- Command.Sync.commitStaged Git.Branch.AutomaticCommit msg
 			when ok $
-				Command.Sync.updateSyncBranch =<< getCurrentBranch
+				Command.Sync.updateBranches =<< getCurrentBranch
 			return ok
 
 {- OSX needs a short delay after a file is added before locking it down,
diff --git a/CHANGELOG b/CHANGELOG
index fb0d8619d..dccb55c8b 100644
--- a/CHANGELOG
+++ b/CHANGELOG
@@ -7,7 +7,8 @@ git-annex (6.20181012) UNRELEASED; urgency=medium
     useful with --hide-missing to hide/unhide files after their content
     has been dropped or received.
   * git-annex sync --content supports --hide-missing; it can
-    be used to get the content of hidden files.
+    be used to get the content of hidden files, and it updates the
+    adjusted branch to hide/unhide files as necessary.
   * Removed the old Android app.
   * Removed support for building with very old ghc < 8.0.1,
     and with yesod < 1.4.3, and without concurrent-output,
diff --git a/Command/Sync.hs b/Command/Sync.hs
index c7b2cd882..f197be1bb 100644
--- a/Command/Sync.hs
+++ b/Command/Sync.hs
@@ -19,7 +19,7 @@ module Command.Sync (
 	pushBranch,
 	updateBranch,
 	syncBranch,
-	updateSyncBranch,
+	updateBranches,
 	seekExportContent,
 ) where
 
@@ -227,7 +227,7 @@ mergeConfig =
 
 merge :: CurrBranch -> [Git.Merge.MergeConfig] -> ResolveMergeOverride -> Git.Branch.CommitMode -> Git.Branch -> Annex Bool
 merge currbranch mergeconfig resolvemergeoverride commitmode tomerge = case currbranch of
-	(Just b, Just adj) -> updateAdjustedBranch tomerge (b, adj) mergeconfig canresolvemerge commitmode
+	(Just b, Just adj) -> mergeToAdjustedBranch tomerge (b, adj) mergeconfig canresolvemerge commitmode
 	(b, _) -> autoMergeFrom tomerge b mergeconfig canresolvemerge commitmode
   where
 	canresolvemerge = case resolvemergeoverride of
@@ -342,17 +342,29 @@ needMerge (Just branch, madj) = ifM (allM id checks)
 
 pushLocal :: CurrBranch -> CommandStart
 pushLocal b = do
-	updateSyncBranch b
+	updateBranches b
 	stop
 
-updateSyncBranch :: CurrBranch -> Annex ()
-updateSyncBranch (Nothing, _) = noop
-updateSyncBranch (Just branch, madj) = do
+updateBranches :: CurrBranch -> Annex ()
+updateBranches (Nothing, _) = noop
+updateBranches (Just branch, madj) = do
 	-- When in an adjusted branch, propigate any changes made to it
-	-- back to the original branch.
-	maybe noop (propigateAdjustedCommits branch) madj
+	-- back to the original branch. The adjusted branch may also need
+	-- to be updated to hide/expose files.
+	case madj of
+		Nothing -> noop
+		Just adj -> do
+			let origbranch = branch
+			propigateAdjustedCommits origbranch adj
+			when (adjustmentHidesFiles adj) $ do
+				showSideAction "updating adjusted branch"
+				let adjbranch = originalToAdjusted origbranch adj
+				unlessM (updateAdjustedBranch adj adjbranch origbranch) $
+					warning $ unwords [ "Updating adjusted branch failed." ]
+					
 	-- Update the sync branch to match the new state of the branch
 	inRepo $ updateBranch (syncBranch branch) branch
+
 	-- In direct mode, we're operating on some special direct mode
 	-- branch, rather than the intended branch, so update the intended
 	-- branch.
diff --git a/doc/todo/assistant_support_hide-missing.mdwn b/doc/todo/assistant_support_hide-missing.mdwn
new file mode 100644
index 000000000..12ea72d5d
--- /dev/null
+++ b/doc/todo/assistant_support_hide-missing.mdwn
@@ -0,0 +1,11 @@
+While `git annex sync` supports branches set up by `git annex adjust
+--hide-missing`, the assisitant does not yet.
+
+This would invole:
+
+* The assistant also needs to scan the original branch when looking for
+  files to download.
+
+* The assistant ought to update the adjusted branch at some point after
+  downloads, but it's not clear when. Perhaps this will need to be deferred
+  until it can be done more cheaply, so it can do it after every file.
diff --git a/doc/todo/better_way_to_get_missing_files.mdwn b/doc/todo/better_way_to_get_missing_files.mdwn
new file mode 100644
index 000000000..4e7ddb4a0
--- /dev/null
+++ b/doc/todo/better_way_to_get_missing_files.mdwn
@@ -0,0 +1,34 @@
+Currently in a `git annex adjust --hide-missing` branch, the only way to
+get missing files is to run `git annex sync --content`, with appropriate preferred
+content settings or with `-C path` to get a specific path. This is kind of
+klunky for ad-hoc getting files.
+
+It would be possible to make `git annex get`, `git annex copy --from remote`, etc
+operate on hidden files. Some of the infrastructure is there; it may be as
+simple as using LsFiles.inRepoOrBranch instead of LsFiles.inRepo to seek
+the files.
+
+Two open questions:
+
+* Would it make more sense for this to be the default behavior when in the
+  adjusted branch, or for it to be an option, like "--branch=master"?
+
+  One advantage to the latter is that it would also be usable in bare
+  repos, or if you just for some reason want to get files present in some
+  other branch than the current one.
+
+  The former might be easier, but it could also be kind of surprising.
+  `git annex get .` would download tons of files, which `ls` doesn't
+  display.
+
+  Of course, both things could be supported too.
+
+* After getting the files, they'll still be hidden until the branch is
+  updated to include them. When should that happen?
+
+  The current method of re-running `git annex adjust --hide-missing` will
+  expose them, but the way that works is probably too slow to run after
+  every command. Even if it were fast, it would generate a lot of dangling
+  objects over time. So leave the update up to the user to run the command
+  when they want it? But then the user may get confused, why did it
+  download files and they didn't appear?
diff --git a/doc/todo/hide_missing_files.mdwn b/doc/todo/hide_missing_files.mdwn
index c11845a8f..b478b863d 100644
--- a/doc/todo/hide_missing_files.mdwn
+++ b/doc/todo/hide_missing_files.mdwn
@@ -25,3 +25,5 @@ Thanks for any advice! --[[anarcat]]
 > > cleaner, of course, if adjusted branches could do this. --[[anarcat]]
 
 Other discussions: [[forum/How_to_hide_broken_symlinks]], where the idea of using views to hide missing files is introduced and [[forum/How_do_I_hide_files_not_present_in_the_local_annex__63__]], where it is said that placeholders shouldn't be used in direct mode... --[[anarcat]]
+
+> [[done]]! --[[Joey]]
diff --git a/doc/todo/hide_missing_files/comment_4_e3bf8aaecc0f612873609c92814dcd12._comment b/doc/todo/hide_missing_files/comment_4_e3bf8aaecc0f612873609c92814dcd12._comment

(Diff truncated)
new tip
(Still need to make git annex sync --content update the adjusted branch
to expose files it downloaded, which this relies on.)
This commit was sponsored by Ewen McNeill on Patreon.
diff --git a/doc/tips/hiding_missing_files.mdwn b/doc/tips/hiding_missing_files.mdwn
new file mode 100644
index 000000000..55a26d00f
--- /dev/null
+++ b/doc/tips/hiding_missing_files.mdwn
@@ -0,0 +1,146 @@
+Annexed files can have their content either present in the repository, or
+not locally present (but stored in other repositories). Normally such
+missing files are represented by broken symlinks or pointer files.
+
+Sometimes it can be useful to hide the missing files, so you can focus on
+only the files whose content is available to use. This is possible to do,
+but it needs some different workflows of using git-annex.
+
+## getting started
+
+To get started, your repository needs to be upgraded to v6, since the
+feature does not work in v5 repositories.
+
+	git annex upgrade --version=6
+
+The [[git-annex adjust|git-annex-adjust]] command sets up an adjusted form
+of a git branch, in this case we'll ask it to hide missing files.
+
+	git annex adjust --hide-missing
+
+And now the working tree only contains annexed files whose content is
+present. Files with missing content are gone (but not forgotten).
+
+The command switched to a branch with a name like "master(hidemissing)". Since
+it's a regular git branch, you can switch back and forth between it and the
+full branch at any time:
+
+	git checkout master
+	...
+	git checkout "master(hidemissing)"
+
+## git commands in the adjusted branch
+
+When in the adjusted branch, you can use the usual git commands, adding files,
+renaming them, and deleting them, and committing. But bear in mind you're not
+in the master branch, and so your commits won't touch the master branch. So,
+you need a way to update the master branch the changes you made to the adjusted
+branch. That's easy, just sync:
+
+	touch new-file
+	git annex add new-file
+	git commit -m 'added a file'
+	git annex sync --no-push --no-pull
+
+That sync updated the master branch, cherry-picking the commit into it:
+
+	> git log --stat master -n 1
+	commit 175ce2309a9a6f61b2c918f0878ea3060eab10ea
+	Author: Joey Hess <joeyh@joeyh.name>
+	Date:   Sat Oct 20 12:12:00 2018 -0400
+	
+	    added a file
+	
+	 new-file | 1 +
+	 1 file changed, 1 insertion(+)
+
+Similarly, you can delete a file and sync, and it will be removed from the master
+branch. 
+
+[[!template id=note text="""
+A tricky point, that's worth mentioning here is that, when you `git annex drop`
+a file, and then delete it, and sync, it *won't* be removed from the master branch. 
+
+Why not? Well, the adjusted branch hides missing files; after dropping the file
+is missing, and after deletion it's hidden. And you generally don't want to
+remove hidden files from the master branch in a sync from the adjusted branch.
+
+If that seems complicated, don't worry, the behavior will probably
+make sense when you encounter this situation.
+"""]]
+
+You can also use `git annex sync` to pull changes from remotes into the adjusted
+branch. It will automatically filter out missing files while merging the other
+changes.
+
+So that's all the usual git operations covered; you can use regular git commands
+on the working tree and to commit files, and you use `git annex sync` to push
+and pull. Now we need to talk about git-annex operations that get or drop
+content, which can be tricky since missing files are hidden.
+
+## getting and dropping files
+
+So, you're in a branch, missing files are hidden, and you want git-annex to get
+some file. What do you do?
+
+	> git annex get some_file
+	git-annex: some_file not found
+	git-annex: get: 1 failed
+
+Well of course, that doesn't work, the file's pointer is not in the working tree;
+it's been hidden. Asking git-annex to get a whole directory won't work either;
+all files in the working tree are present so it won't find any missing ones to
+operate on. (This might be improved later, but it's how things are currently.)
+
+What will work is to use `git annex sync`, which knows you're in an adjusted branch
+and can get hidden files.
+
+	git annex sync --content some_file some_directory --no-push --no-pull
+
+Unlike getting files that are hidden, dropping files is no problem, since
+the file you want to drop will be present. But, after dropping a file,
+it won't be hidden right away. This is because updating the adjusted branch to
+hide the dropped file is a bit expensive. Here's how to drop and then hide
+files:
+
+	git annex drop some_file
+	git annex adjust --hide-missing
+
+Re-running `git annex adjust` while in the adjusted branch updates the branch
+to hide any newly missing files, and unhide any files whose content is
+now present. (Running `git annex sync` also does that, along with the other
+syncing.)
+
+If this seems a bit of a pain, read on for a simpler way ...
+
+## a simple workflow
+
+Here's how I use this for my podcasts repository. I [[use git-annex to download
+podcasts|downloading_podcasts]] to a server. I want to keep all the podcasts,
+but on my laptop of phone, I mostly want to only see podcasts I've not already
+listened to.
+
+I set up the repository like this:
+
+	git clone server:/path/to/podcasts
+	cd podcasts
+	git annex upgrade --version=6
+	git annex adjust --hide-missing
+	git annex group here client
+	git annex wanted here standard
+
+The last two commands make the repository use the 
+[[standard preferred content setting for client repositories|preferred_content/standard_groups]],
+so it wants to get a copy of all files except for files inside "archive"
+directories. When I'm done with listening to a podcast, I'll move it into an
+"archive" directory to indicate I'm done with it.
+
+To download all the new podcasts and make the files visible,
+and drop the drop the archived podcasts, and hide their files, I now
+only need to run one command:
+
+	git annex sync --content
+
+Later, when I want to revisit an old podcast, I can simply check
+out the master branch to make all the old files appear, and
+`git annex get` the one I want.

Added a comment
diff --git a/doc/todo/wishlist__58___--dry-run_option_for_all_commands/comment_2_8ac7ae6937d219854bc60b56b8646d8b._comment b/doc/todo/wishlist__58___--dry-run_option_for_all_commands/comment_2_8ac7ae6937d219854bc60b56b8646d8b._comment
new file mode 100644
index 000000000..d484d5559
--- /dev/null
+++ b/doc/todo/wishlist__58___--dry-run_option_for_all_commands/comment_2_8ac7ae6937d219854bc60b56b8646d8b._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="Chris"
+ avatar="http://cdn.libravatar.org/avatar/02b67b7ebace8cb6433504ba9a17d4a4"
+ subject="comment 2"
+ date="2018-10-20T08:09:40Z"
+ content="""
+Hm, IMHO such a “dry-run” flag would be most beneficial for better understanding the preferred/required content settings and try their effect while working on finding the right expression. Therefore, the “drop”, “get” and “sync --content” commands would benefit from such a flag, especially in combination with flags such as “--auto”. Maybe it's just me, but I am not able to utilize the “find” command in a way that it respects preferred content and numcopies and further settings in the same way as the three commands above would do, and testing preferred content expressions is therefore a blind flight.
+"""]]

devblog
diff --git a/doc/devblog/day_549__operating_on_hidden_files.mdwn b/doc/devblog/day_549__operating_on_hidden_files.mdwn
new file mode 100644
index 000000000..71d41931a
--- /dev/null
+++ b/doc/devblog/day_549__operating_on_hidden_files.mdwn
@@ -0,0 +1,52 @@
+Goal for today was to make `git annex sync --content` operate on files hidden by
+`git annex adjust --hide-missing`. However, this got into the weeds pretty
+quickly due to the problem of how to handle `--content-of=path` when
+either the whole path or some files within it may be hidden.
+
+Eventually I discovered that `git ls-files --with-tree` can be used to
+get a combined list of files in the index plus files in another tree,
+which in git-annex's case is the original branch that got adjusted.
+It's not documented to work the way I'm using it (worrying), but it's
+perfect, because git-annex already uses `git ls-files` extensively and this
+could let lots of commands get support for operating on hidden files.
+
+That said, I'm going to limit it to `git annex sync` for now,
+because it would be a lot of work to make lots of commands support them,
+and there could easily be commands where supporting them adds lots of
+complexity or room for confusion.
+
+Demo time:
+
+	joey@darkstar:/tmp> git clone ~/lib/sound/
+	Cloning into 'sound'...
+	done.
+	Checking out files: 100% (45727/45727), done.
+	joey@darkstar:/tmp> cd sound/
+	joey@darkstar:/tmp/sound> git annex init --version=6
+	init  (merging origin/git-annex origin/synced/git-annex into git-annex...)
+	(scanning for unlocked files...)
+	ok
+	joey@darkstar:/tmp/sound> git annex adjust --hide-missing
+	adjust 
+	Switched to branch 'adjusted/master(hidemissing)'
+	ok
+	joey@darkstar:/tmp/sound#master(hidemissing)> ls
+	podcasts
+	joey@darkstar:/tmp/sound#master(hidemissing)> ls podcasts
+	feeds
+	joey@darkstar:/tmp/sound#master(hidemissing)> git annex sync origin --no-push -C podcasts
+	...
+	joey@darkstar:/tmp/sound> time git annex adjust --hide-missing
+	adjust
+	ok
+	15.03user 3.11system 0:14.95elapsed 121%CPU (0avgtext+0avgdata 93280maxresident)k
+	0inputs+88outputs (0major+12206minor)pagefaults 0swaps
+	joey@darkstar:/tmp/sound#master(hidemissing)> ls podcasts
+	Astronomy_Cast/                                     Hacking_Culture/
+	Benjamen_Walker_s_Theory_of_Everything/             In_Our_Time/
+	Clarkesworld_Magazine___Science_Fiction___Fantasy/  Lightspeed_MagazineLightspeed_Magazine___Science_Fiction___Fantasy/
+	DatCast/                                            Long_Now__Seminars_About_Long_term_Thinking/
+	Escape_Pod/                                         Love___Radio/
+	Gravy/                                              feeds
+
+Close to being able to use this on my phone. ;-)

sync --content now supports --hide-missing adjusted branches
This relies on git ls-files --with-tree, which I'm using in a way that
its man page does not document. Hm. I emailed the git list to try to get
the docs improved, but at least the git test suite does test the same
kind of use case I'm using here.
Performance impact when not in an adjusted branch is limited to some
additional MVar accesses, and a single git call to determine the name of
the current branch. So very minimal.
When in an adjusted branch, the performance impact is
in Annex.WorkTree.lookupFile, which starts doing an equal amount of work
for files that didn't exist as it already did for files that were
unlocked.
This commit was sponsored by Jochen Bartl on Patreon.
diff --git a/Annex/CatFile.hs b/Annex/CatFile.hs
index 7062f785a..4f42db617 100644
--- a/Annex/CatFile.hs
+++ b/Annex/CatFile.hs
@@ -1,6 +1,6 @@
 {- git cat-file interface, with handle automatically stored in the Annex monad
  -
- - Copyright 2011-2015 Joey Hess <id@joeyh.name>
+ - Copyright 2011-2018 Joey Hess <id@joeyh.name>
  -
  - Licensed under the GNU GPL version 3 or higher.
  -}
@@ -16,9 +16,11 @@ module Annex.CatFile (
 	catObjectMetaData,
 	catFileStop,
 	catKey,
+	catSymLinkTarget,
 	catKeyFile,
 	catKeyFileHEAD,
-	catSymLinkTarget,
+	catKeyFileHidden,
+	catObjectMetaDataHidden,
 ) where
 
 import qualified Data.ByteString.Lazy as L
@@ -34,6 +36,8 @@ import Git.FilePath
 import Git.Index
 import qualified Git.Ref
 import Annex.Link
+import Annex.CurrentBranch
+import Types.AdjustedBranch
 import Utility.FileSystemEncoding
 
 catFile :: Git.Branch -> FilePath -> Annex L.ByteString
@@ -142,3 +146,16 @@ catKeyFile f = ifM (Annex.getState Annex.daemon)
 
 catKeyFileHEAD :: FilePath -> Annex (Maybe Key)
 catKeyFileHEAD f = catKey $ Git.Ref.fileFromRef Git.Ref.headRef f
+
+{- Look in the original branch from whence an adjusted branch is based
+ - to find the file. But only when the adjustment hides some files. -}
+catKeyFileHidden :: FilePath -> CurrBranch -> Annex (Maybe Key) 
+catKeyFileHidden = hiddenCat catKey
+
+catObjectMetaDataHidden :: FilePath -> CurrBranch -> Annex (Maybe (Integer, ObjectType))
+catObjectMetaDataHidden = hiddenCat catObjectMetaData
+
+hiddenCat :: (Ref -> Annex (Maybe a)) -> FilePath -> CurrBranch -> Annex (Maybe a)
+hiddenCat a f (Just origbranch, Just adj)
+	| adjustmentHidesFiles adj = a (Git.Ref.fileFromRef origbranch f)
+hiddenCat _ _ _ = return Nothing
diff --git a/Annex/WorkTree.hs b/Annex/WorkTree.hs
index 930170798..89d80c0ca 100644
--- a/Annex/WorkTree.hs
+++ b/Annex/WorkTree.hs
@@ -1,6 +1,6 @@
 {- git-annex worktree files
  -
- - Copyright 2013-2016 Joey Hess <id@joeyh.name>
+ - Copyright 2013-2018 Joey Hess <id@joeyh.name>
  -
  - Licensed under the GNU GPL version 3 or higher.
  -}
@@ -13,6 +13,7 @@ import Annex.CatFile
 import Annex.Version
 import Annex.Content
 import Annex.ReplaceFile
+import Annex.CurrentBranch
 import Config
 import Git.FilePath
 import qualified Git.Ref
@@ -28,19 +29,20 @@ import qualified Database.Keys.SQL
  -
  - An unlocked file will not have a link on disk, so fall back to
  - looking for a pointer to a key in git.
+ -
+ - When in an adjusted branch that may have hidden the file, looks for a
+ - pointer to a key in the original branch.
  -}
 lookupFile :: FilePath -> Annex (Maybe Key)
 lookupFile file = isAnnexLink file >>= \case
-	Just key -> makeret key
+	Just key -> return (Just key)
 	Nothing -> ifM (versionSupportsUnlockedPointers <||> isDirect)
 		( ifM (liftIO $ doesFileExist file)
-			( maybe (return Nothing) makeret =<< catKeyFile file
-			, return Nothing
+			( catKeyFile file
+			, catKeyFileHidden file =<< getCurrentBranch
 			)
 		, return Nothing 
 		)
-  where
-	makeret = return . Just
 
 {- Modifies an action to only act on files that are already annexed,
  - and passes the key on to it. -}
diff --git a/CHANGELOG b/CHANGELOG
index 7d4a46604..fb0d8619d 100644
--- a/CHANGELOG
+++ b/CHANGELOG
@@ -6,6 +6,8 @@ git-annex (6.20181012) UNRELEASED; urgency=medium
     again will update the branch as needed. This is mostly
     useful with --hide-missing to hide/unhide files after their content
     has been dropped or received.
+  * git-annex sync --content supports --hide-missing; it can
+    be used to get the content of hidden files.
   * Removed the old Android app.
   * Removed support for building with very old ghc < 8.0.1,
     and with yesod < 1.4.3, and without concurrent-output,
diff --git a/CmdLine/Seek.hs b/CmdLine/Seek.hs
index 677fc4b68..47a52176c 100644
--- a/CmdLine/Seek.hs
+++ b/CmdLine/Seek.hs
@@ -29,6 +29,7 @@ import Logs.Transfer
 import Remote.List
 import qualified Remote
 import Annex.CatFile
+import Annex.CurrentBranch
 import Annex.Content
 import Annex.InodeSentinal
 import qualified Database.Keys
@@ -270,17 +271,33 @@ seekHelper a l = inRepo $ \g ->
 -- An item in the work tree, which may be a file or a directory.
 newtype WorkTreeItem = WorkTreeItem FilePath
 
+-- When in an adjusted branch that hides some files, it may not exist
+-- in the current work tree, but in the original branch. This allows
+-- seeking for such files.
+newtype AllowHidden = AllowHidden Bool
+
 -- Many git commands seek work tree items matching some criteria,
 -- and silently skip over anything that does not exist. But users expect
 -- an error message when one of the files they provided as a command-line
 -- parameter doesn't exist, so this checks that each exists.
 workTreeItems :: CmdParams -> Annex [WorkTreeItem]
-workTreeItems ps = do
+workTreeItems = workTreeItems' (AllowHidden False)
+
+workTreeItems' :: AllowHidden -> CmdParams -> Annex [WorkTreeItem]
+workTreeItems' (AllowHidden allowhidden) ps = do
+	currbranch <- getCurrentBranch
 	forM_ ps $ \p ->
-		unlessM (isJust <$> liftIO (catchMaybeIO $ getSymbolicLinkStatus p)) $ do
+		unlessM (exists p <||> hidden currbranch p) $ do
 			toplevelWarning False (p ++ " not found")
 			Annex.incError
 	return (map WorkTreeItem ps)
+  where
+	exists p = isJust <$> liftIO (catchMaybeIO $ getSymbolicLinkStatus p)
+	hidden currbranch p
+		| allowhidden = do
+			f <- liftIO $ relPathCwdToFile p
+			isJust <$> catObjectMetaDataHidden f currbranch
+		| otherwise = return False
 
 notSymlink :: FilePath -> IO Bool
 notSymlink f = liftIO $ not . isSymbolicLink <$> getSymbolicLinkStatus f
diff --git a/Command/Sync.hs b/Command/Sync.hs
index 5e42e6eff..c7b2cd882 100644
--- a/Command/Sync.hs
+++ b/Command/Sync.hs
@@ -556,26 +556,35 @@ seekSyncContent o rs currbranch = do
 	bloom <- case keyOptions o of
 		Just WantAllKeys -> Just <$> genBloomFilter (seekworktree mvar [])
 		_ -> case currbranch of
-			(origbranch, Just adj) | adjustmentHidesFiles adj -> do
-				seekbranch origbranch (contentOfOption o)
-				pure Nohing
-			_ = do
+                	(Just origbranch, Just adj) | adjustmentHidesFiles adj -> do
+				l <- workTreeItems' (AllowHidden True) (contentOfOption o)
+				seekincludinghidden origbranch mvar l (const noop)
+				pure Nothing
+			_ -> do
 				l <- workTreeItems (contentOfOption o)
 				seekworktree mvar l (const noop)
 				pure Nothing
 	withKeyOptions' (keyOptions o) False
-		(return (seekkeys mvar bloom))
+		(return (gokey mvar bloom))
 		(const noop)
 		[]
 	finishCommandActions
 	liftIO $ not <$> isEmptyMVar mvar
   where
-	seekworktree mvar l bloomfeeder = seekHelper LsFiles.inRepo l >>=
-		mapM_ (\f -> ifAnnexed f (go (Right bloomfeeder) mvar (AssociatedFile (Just f))) noop)
-
-	seekbranch origbranch l = 
-
-	seekkeys mvar bloom (k, _) = go (Left bloom) mvar (AssociatedFile Nothing) k
+	seekworktree mvar l bloomfeeder = 
+		seekHelper LsFiles.inRepo l
+			>>= gofiles bloomfeeder mvar
+
+	seekincludinghidden origbranch mvar l bloomfeeder = 
+		seekHelper (LsFiles.inRepoOrBranch origbranch) l 
+			>>= gofiles bloomfeeder mvar
+

(Diff truncated)
quoted markdown asterisks
diff --git a/doc/todo/preserve_file_extensions_in_WORM_and_URL_keys.mdwn b/doc/todo/preserve_file_extensions_in_WORM_and_URL_keys.mdwn
index 57cb9333e..c9ff47cde 100644
--- a/doc/todo/preserve_file_extensions_in_WORM_and_URL_keys.mdwn
+++ b/doc/todo/preserve_file_extensions_in_WORM_and_URL_keys.mdwn
@@ -1 +1 @@
-Right now, when computing a WORM key from a relative path or a URL key from a URL, if the original string is longer than a SHA256 checksum, its tail is replaced with its md5.  Unfortunately, this eats up the file extension(s) at the end, causing the issues that *E backends solve.   It would be better to keep the tail of the path and replace the start or the middle with the md5, preserving extensions (as configured in annex.maxextensionlength) the same way *E backends do.  Maybe also, add a config option for the length beyond which the replacement-with-checksum happens?
+Right now, when computing a WORM key from a relative path or a URL key from a URL, if the original string is longer than a SHA256 checksum, its tail is replaced with its md5.  Unfortunately, this eats up the file extension(s) at the end, causing the issues that \*E backends solve.   It would be better to keep the tail of the path and replace the start or the middle with the md5, preserving extensions (as configured in annex.maxextensionlength) the same way \*E backends do.  Maybe also, add a config option for the length beyond which the replacement-with-checksum happens?

added suggestion to preserve file extensions in WORM and URL keys
diff --git a/doc/todo/preserve_file_extensions_in_WORM_and_URL_keys.mdwn b/doc/todo/preserve_file_extensions_in_WORM_and_URL_keys.mdwn
new file mode 100644
index 000000000..57cb9333e
--- /dev/null
+++ b/doc/todo/preserve_file_extensions_in_WORM_and_URL_keys.mdwn
@@ -0,0 +1 @@
+Right now, when computing a WORM key from a relative path or a URL key from a URL, if the original string is longer than a SHA256 checksum, its tail is replaced with its md5.  Unfortunately, this eats up the file extension(s) at the end, causing the issues that *E backends solve.   It would be better to keep the tail of the path and replace the start or the middle with the md5, preserving extensions (as configured in annex.maxextensionlength) the same way *E backends do.  Maybe also, add a config option for the length beyond which the replacement-with-checksum happens?

Added a comment
diff --git a/doc/todo/option_to_add_user-specified_string_to_key/comment_2_915c1c31fcb23455aa11331cd34aa92d._comment b/doc/todo/option_to_add_user-specified_string_to_key/comment_2_915c1c31fcb23455aa11331cd34aa92d._comment
new file mode 100644
index 000000000..f0b61e3cf
--- /dev/null
+++ b/doc/todo/option_to_add_user-specified_string_to_key/comment_2_915c1c31fcb23455aa11331cd34aa92d._comment
@@ -0,0 +1,13 @@
+[[!comment format=mdwn
+ username="Ilya_Shlyakhter"
+ avatar="http://cdn.libravatar.org/avatar/1647044369aa7747829c38b9dcc84df0"
+ subject="comment 2"
+ date="2018-10-19T17:54:49Z"
+ content="""
+Another use case for a user-defined string field in a key is, for URL or WORM keys, to include additional information unique to the object.   E.g. for an s3:// URI (handled by an external special remote) could embed the ETag in the key.   Or for a dx:// URI to include the DNAnexus file ID .
+
+From [[internals/key_format]], it seems like adding -uXXXXXX- (with XXXXXX a user-specified string) would not break compatibility?
+
+
+
+"""]]

Added a comment
diff --git a/doc/design/external_special_remote_protocol/comment_36_f8081ce200700516efef61ec0ac86f86._comment b/doc/design/external_special_remote_protocol/comment_36_f8081ce200700516efef61ec0ac86f86._comment
new file mode 100644
index 000000000..ba95e0578
--- /dev/null
+++ b/doc/design/external_special_remote_protocol/comment_36_f8081ce200700516efef61ec0ac86f86._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="Ilya_Shlyakhter"
+ avatar="http://cdn.libravatar.org/avatar/1647044369aa7747829c38b9dcc84df0"
+ subject="comment 36"
+ date="2018-10-19T15:52:21Z"
+ content="""
+What is the intended use case for CHECKURL-MULTI?  Are there examples of external special remote implementations that use this response?
+"""]]

Added a comment
diff --git a/doc/bugs/v6_hardlinking_is_not_stable_across_lock__47__unlock_or_cloning/comment_4_41478c52765cf09a94c7137437ad8716._comment b/doc/bugs/v6_hardlinking_is_not_stable_across_lock__47__unlock_or_cloning/comment_4_41478c52765cf09a94c7137437ad8716._comment
new file mode 100644
index 000000000..c938dc193
--- /dev/null
+++ b/doc/bugs/v6_hardlinking_is_not_stable_across_lock__47__unlock_or_cloning/comment_4_41478c52765cf09a94c7137437ad8716._comment
@@ -0,0 +1,11 @@
+[[!comment format=mdwn
+ username="andrey_utkin@49e37627b3060c40292113d73d7ffbf317233e62"
+ nickname="andrey_utkin"
+ avatar="http://cdn.libravatar.org/avatar/95bb7f4f7647cc24c1cf635b61578842"
+ subject="comment 4"
+ date="2018-10-18T23:34:26Z"
+ content="""
+I am stupid talking about executable files hardlinking. I think I just chmod-ed already hardlinking files, that's how I got it. No surprise.
+
+I am ok with this quirk (executable files are not thinned), but just curious: what exactly influenced such design decision?
+"""]]

Added a comment
diff --git a/doc/bugs/v6_hardlinking_is_not_stable_across_lock__47__unlock_or_cloning/comment_3_cbe7f29914091bc9de49dab8f4ed6003._comment b/doc/bugs/v6_hardlinking_is_not_stable_across_lock__47__unlock_or_cloning/comment_3_cbe7f29914091bc9de49dab8f4ed6003._comment
new file mode 100644
index 000000000..7c89cfe3d
--- /dev/null
+++ b/doc/bugs/v6_hardlinking_is_not_stable_across_lock__47__unlock_or_cloning/comment_3_cbe7f29914091bc9de49dab8f4ed6003._comment
@@ -0,0 +1,15 @@
+[[!comment format=mdwn
+ username="andrey_utkin@49e37627b3060c40292113d73d7ffbf317233e62"
+ nickname="andrey_utkin"
+ avatar="http://cdn.libravatar.org/avatar/95bb7f4f7647cc24c1cf635b61578842"
+ subject="comment 3"
+ date="2018-10-18T20:18:01Z"
+ content="""
+> When two files have the same content, annex.thin will only make one of them be a hard link to the annex object. The other file will have its own redundant copy of the content. This is the only way to prevent an edit to one file immediatly changing the other file, which would be very surprising behavior.
+
+Ah, that explains my biggest confusion. Thanks!
+
+> When the file in git has the executable bit set, annex.thin is not honored for that file either. That's a lot simpler than juggling permissions around.
+
+Ok, I will take a note. But was it this way from the very beginning, or is this a later-added idea? From my observations, this is not true. I do have a large annex repo, I have done a global `chmod -R u=rwx,g=rx,o=rx *`, all my files have exec bit set and all of them are hardlinked (except for the files which are duplicates of other hardlinked files). I don't remember for sure, it might be that I've chmod-ed files in .git/annex/objects as well :)
+"""]]

response
diff --git a/doc/bugs/v6_hardlinking_is_not_stable_across_lock__47__unlock_or_cloning/comment_2_6c6ed937660b6f19829362c2c2cb4991._comment b/doc/bugs/v6_hardlinking_is_not_stable_across_lock__47__unlock_or_cloning/comment_2_6c6ed937660b6f19829362c2c2cb4991._comment
new file mode 100644
index 000000000..dbe7e8921
--- /dev/null
+++ b/doc/bugs/v6_hardlinking_is_not_stable_across_lock__47__unlock_or_cloning/comment_2_6c6ed937660b6f19829362c2c2cb4991._comment
@@ -0,0 +1,18 @@
+[[!comment format=mdwn
+ username="joey"
+ subject="""comment 2"""
+ date="2018-10-18T19:45:15Z"
+ content="""
+When two files have the same content, annex.thin will only make one of them
+be a hard link to the annex object. The other file will have its own
+redundant copy of the content. This is the only way to prevent an edit to
+one file immediatly changing the other file, which would be very surprising
+behavior.
+
+When the file in git has the executable bit set, annex.thin is not honored
+for that file either. That's a lot simpler than juggling permissions
+around.
+
+Does that explain everything you're seeing, or is there still a bug buried
+in that transcript? I have not had time to read the whole thing.
+"""]]

devblog
diff --git a/doc/devblog/day_548__hiding_missing_files.mdwn b/doc/devblog/day_548__hiding_missing_files.mdwn
new file mode 100644
index 000000000..5f2618308
--- /dev/null
+++ b/doc/devblog/day_548__hiding_missing_files.mdwn
@@ -0,0 +1,18 @@
+At long last there's a way to hide annexed files whose content
+is missing from the working tree: `git-annex adjust --hide-missing`
+
+And once you've run that command, `git annex sync` will update the tree
+to hide/unhide files whose content availability has changed.
+(So will running `git annex adjust` again with the same options.)
+
+You can also combine `--hide-missing` with `--unlock`, which should prove
+useful in a lot of situations.
+
+My implementation today is as simple as possible, which means that every
+time it updates the adjusted branch it does a full traversal of the
+original branch, checks content availability, and generates a new branch.
+So it may not be super fast in a large repo, but I was able to implement
+it in one day's work. It should be possible later to speed it up a
+lot, by [maintaining more state](http://git-annex.branchable.com/todo/hide_missing_files/#comment-5f56545b69a0baebffe5411258ee30ea).
+
+Today's work was sponsored by Ethan Aubin.

adjust --hide-missing
* At long last there's a way to hide annexed files whose content
is missing from the working tree: git-annex adjust --hide-missing
* When already in an adjusted branch, running git-annex adjust
again will update the branch as needed. This is mostly
useful with --hide-missing to hide/unhide files after their content
has been dropped or received.
Still needs integration with sync and the assistant, and not as fast as it
could be, but already usable.
This commit was sponsored by Ethan Aubin.
diff --git a/Annex/AdjustedBranch.hs b/Annex/AdjustedBranch.hs
index bdac72bbe..a23b70154 100644
--- a/Annex/AdjustedBranch.hs
+++ b/Annex/AdjustedBranch.hs
@@ -240,12 +240,21 @@ originalBranch = fmap fromAdjustedBranch <$> inRepo Git.Branch.current
  - branch).
  -
  - Can fail, if no branch is checked out, or if the adjusted branch already
- - exists, or perhaps if staged changes conflict with the adjusted branch.
+ - exists, or if staged changes prevent a checkout.
  -}
 enterAdjustedBranch :: Adjustment -> Annex Bool
-enterAdjustedBranch adj = go =<< originalBranch
+enterAdjustedBranch adj = inRepo Git.Branch.current >>= \case
+	Just currbranch -> case getAdjustment currbranch of
+		Just curradj | curradj == adj ->
+			reenterAdjustedBranch adj currbranch
+				(fromAdjustedBranch currbranch)
+		_ -> go currbranch
+	Nothing -> do
+		warning "not on any branch!"
+		return False
   where
-	go (Just origbranch) = do
+	go currbranch = do
+		let origbranch = fromAdjustedBranch currbranch
 		let adjbranch = adjBranch $ originalToAdjusted origbranch adj
 		ifM (inRepo (Git.Ref.exists adjbranch) <&&> (not <$> Annex.getState Annex.force))
 			( do
@@ -263,17 +272,52 @@ enterAdjustedBranch adj = go =<< originalBranch
 					]
 				return False
 			, do
-				AdjBranch b <- preventCommits $ const $ 
+				b <- preventCommits $ const $ 
 					adjustBranch adj origbranch
-				showOutput -- checkout can have output in large repos
-				inRepo $ Git.Command.runBool
-					[ Param "checkout"
-					, Param $ fromRef $ Git.Ref.base b
-					]
+				checkoutAdjustedBranch b []
 			)
-	go Nothing = do
-		warning "not on any branch!"
-		return False
+
+checkoutAdjustedBranch :: AdjBranch -> [CommandParam] -> Annex Bool
+checkoutAdjustedBranch (AdjBranch b) checkoutparams = do
+	showOutput -- checkout can have output in large repos
+	inRepo $ Git.Command.runBool $
+		[ Param "checkout"
+		, Param $ fromRef $ Git.Ref.base b
+		-- always show checkout progress, even if --quiet is used
+		-- to suppress other messages
+		, Param "--progress"
+		] ++ checkoutparams
+
+{- Already in a branch with this adjustment, but the user asked to enter it
+ - again. This should have the same result as checking out the original branch,
+ - deleting and rebuilding the adjusted branch, and then checking it out.
+ - But, it can be implemented more efficiently than that.
+ -}
+reenterAdjustedBranch :: Adjustment -> Branch -> OrigBranch -> Annex Bool
+reenterAdjustedBranch adj@(PresenceAdjustment _ _) currbranch origbranch = do
+	b <- preventCommits $ \commitlck -> do
+		-- Avoid losing any commits that the adjusted branch has that
+		-- have not yet been propigated back to the origbranch.
+		_ <- propigateAdjustedCommits' origbranch adj commitlck
+
+		-- Git normally won't do anything when asked to check out the
+		-- currently checked out branch, even when its ref has
+		-- changed. Work around this by writing a raw sha to .git/HEAD.
+		inRepo (Git.Ref.sha currbranch) >>= \case
+			Just headsha -> inRepo $ \r ->
+				writeFile (Git.Ref.headFile r) (fromRef headsha)
+			_ -> noop
+	
+		adjustBranch adj origbranch
+	
+	-- Make git checkout quiet to avoid warnings about disconnected
+	-- branch tips being lost.
+	checkoutAdjustedBranch b [Param "--quiet"]
+reenterAdjustedBranch adj@(LinkAdjustment _) _ origbranch = preventCommits $ \commitlck -> do
+	-- Not really needed here, but done for consistency.
+	_ <- propigateAdjustedCommits' origbranch adj commitlck
+	-- No need to do anything else, because link adjustments are stable.
+	return True
 
 adjustToCrippledFileSystem :: Annex ()
 adjustToCrippledFileSystem = do
diff --git a/CHANGELOG b/CHANGELOG
index f0021ee1b..7d4a46604 100644
--- a/CHANGELOG
+++ b/CHANGELOG
@@ -1,5 +1,11 @@
 git-annex (6.20181012) UNRELEASED; urgency=medium
 
+  * At long last there's a way to hide annexed files whose content
+    is missing from the working tree: git-annex adjust --hide-missing
+  * When already in an adjusted branch, running git-annex adjust
+    again will update the branch as needed. This is mostly
+    useful with --hide-missing to hide/unhide files after their content
+    has been dropped or received.
   * Removed the old Android app.
   * Removed support for building with very old ghc < 8.0.1,
     and with yesod < 1.4.3, and without concurrent-output,
diff --git a/Command/Adjust.hs b/Command/Adjust.hs
index b2956cbc4..9f9e6153e 100644
--- a/Command/Adjust.hs
+++ b/Command/Adjust.hs
@@ -1,6 +1,6 @@
 {- git-annex command
  -
- - Copyright 2016 Joey Hess <id@joeyh.name>
+ - Copyright 2016-2018 Joey Hess <id@joeyh.name>
  -
  - Licensed under the GNU GPL version 3 or higher.
  -}
@@ -16,21 +16,30 @@ cmd = notBareRepo $ notDirect $ noDaemonRunning $
 		paramNothing (seek <$$> optParser)
 
 optParser :: CmdParamsDesc -> Parser Adjustment
-optParser _ = 
-	flag' (LinkAdjustment UnlockAdjustment)
+optParser _ =
+	(LinkAdjustment <$> linkAdjustmentParser)
+	<|> (PresenceAdjustment <$> presenceAdjustmentParser <*> maybeLinkAdjustmentParser)
+
+linkAdjustmentParser :: Parser LinkAdjustment
+linkAdjustmentParser =
+	flag' UnlockAdjustment
 		( long "unlock"
 		<> help "unlock annexed files"
 		)
-	<|> flag' (LinkAdjustment FixAdjustment)
+	<|> flag' FixAdjustment
 		( long "fix"
 		<> help "fix symlinks to annnexed files"
 		)
-	{- Not ready yet
-	<|> flag' (PresenseAdjustment HideMissingAdjustment)
+
+maybeLinkAdjustmentParser :: Parser (Maybe LinkAdjustment)
+maybeLinkAdjustmentParser = Just <$> linkAdjustmentParser <|> pure Nothing
+
+presenceAdjustmentParser :: Parser PresenceAdjustment
+presenceAdjustmentParser =
+	flag' HideMissingAdjustment
 		( long "hide-missing"
-		<> help "omit annexed files whose content is not present"
+		<> help "hide annexed files whose content is not present"
 		)
-	-}
 
 seek :: Adjustment -> CommandSeek
 seek = commandAction . start
diff --git a/doc/forum/How_do_I_hide_files_not_present_in_the_local_annex__63__/comment_5_1ed5e10e51078a0aa7e6968ef48687a3._comment b/doc/forum/How_do_I_hide_files_not_present_in_the_local_annex__63__/comment_5_1ed5e10e51078a0aa7e6968ef48687a3._comment
new file mode 100644
index 000000000..bf55735a5
--- /dev/null
+++ b/doc/forum/How_do_I_hide_files_not_present_in_the_local_annex__63__/comment_5_1ed5e10e51078a0aa7e6968ef48687a3._comment
@@ -0,0 +1,10 @@
+[[!comment format=mdwn
+ username="joey"
+ subject="""comment 5"""
+ date="2018-10-18T18:59:54Z"
+ content="""
+Good news everyone! `git annex adjust --hide-missing` sets up a branch
+where only files with content available are included. And once in such a
+branch, `git annex sync` updates it as necessary to reflect changes in
+content availability.
+"""]]
diff --git a/doc/forum/How_to_hide_broken_symlinks/comment_5_1ed5e10e51078a0aa7e6968ef48687a3._comment b/doc/forum/How_to_hide_broken_symlinks/comment_5_1ed5e10e51078a0aa7e6968ef48687a3._comment
new file mode 100644
index 000000000..bf55735a5
--- /dev/null
+++ b/doc/forum/How_to_hide_broken_symlinks/comment_5_1ed5e10e51078a0aa7e6968ef48687a3._comment
@@ -0,0 +1,10 @@
+[[!comment format=mdwn
+ username="joey"
+ subject="""comment 5"""
+ date="2018-10-18T18:59:54Z"
+ content="""
+Good news everyone! `git annex adjust --hide-missing` sets up a branch
+where only files with content available are included. And once in such a
+branch, `git annex sync` updates it as necessary to reflect changes in
+content availability.
+"""]]
diff --git a/doc/git-annex-adjust.mdwn b/doc/git-annex-adjust.mdwn
index 6f32f3029..07319f7f1 100644
--- a/doc/git-annex-adjust.mdwn
+++ b/doc/git-annex-adjust.mdwn
@@ -4,7 +4,7 @@ git-annex adjust - enter an adjusted branch
 
 # SYNOPSIS
 
-git annex adjust `--unlock|--fix`
+git annex adjust `--unlock|--fix|--hide-missing [--unlock|--fix]`
 

(Diff truncated)
Added a comment: workaround: setting LC_ALL=C
diff --git a/doc/bugs/Assertion___96__cnt___60_____40__sizeof___40____95__nl__95__value__95__type__95__LC__95__TIME__41_____47___sizeof___40____95__nl__95__value__95__type__95__LC__95__TIME__91__0__93____41____41____39___failed./comment_5_ce08bf5b13ae0db7fa06196f56a26e8a._comment b/doc/bugs/Assertion___96__cnt___60_____40__sizeof___40____95__nl__95__value__95__type__95__LC__95__TIME__41_____47___sizeof___40____95__nl__95__value__95__type__95__LC__95__TIME__91__0__93____41____41____39___failed./comment_5_ce08bf5b13ae0db7fa06196f56a26e8a._comment
new file mode 100644
index 000000000..d0a617784
--- /dev/null
+++ b/doc/bugs/Assertion___96__cnt___60_____40__sizeof___40____95__nl__95__value__95__type__95__LC__95__TIME__41_____47___sizeof___40____95__nl__95__value__95__type__95__LC__95__TIME__91__0__93____41____41____39___failed./comment_5_ce08bf5b13ae0db7fa06196f56a26e8a._comment
@@ -0,0 +1,57 @@
+[[!comment format=mdwn
+ username="g@aaed65f19d6c3a2a18c33da828e66c7bb915e65a"
+ nickname="g"
+ avatar="http://cdn.libravatar.org/avatar/10470d6f8a18833e04dee17126d53372"
+ subject="workaround: setting LC_ALL=C"
+ date="2018-10-18T08:55:19Z"
+ content="""
+I had a similar problem yesterday with the latest [x86-64 standalone build](https://downloads.kitenet.net/git-annex/linux/current/git-annex-standalone-amd64.tar.gz), git-annex ver. 6.20180927-g897e5ba57
+
+# Short story
+
+I solved this adding this to my `.bashrc`
+
+    export LC_ALL=C
+
+# Non so short story
+
+I need the standalone version for I'm using an hosting service with ssh connection; it's just a \"classic\" LAMP hosting space, not a full VM, so I cannot install any package on it
+
+In 2016 I was able to install the standalone git-annex version 6.20161231-gc8eeb17da, along with gitolite for access control, and all was working well until recently on one of my machines I upgraded to ver. 6.20180913-1 amd64: trying to get some content always failed with
+
+      [2018-10-17 17:56:52.199123421] P2P > ERROR auth failed
+
+      fd:19: hClose: resource vanished (Broken pipe)
+      failed
+
+After a brief search I found [get over ssh fails with fd:19: hClose: resource vanished - comment 1](http://git-annex.branchable.com/bugs/get_over_ssh_fails_with___fd__58__19__58___hClose__58___resource_vanished/#comment-f9a93468be4a799e1e79e97941449d67) and decidet to upgrade git-annex server side
+
+After upgrade I got the error reported in this bug report subject and after a quick research I found a [similar report on askubuntu](https://askubuntu.com/questions/1081901/right-way-to-fix-assertion-in-loadlocale-c)
+
+The first thing I tried was 
+
+    LC_ALL=C git annex version
+
+and I the error \"disappeared\": bingo!
+
+I realized that `LC_ALL` was *unset* in my gitolite user profile, so I added it to my `.bashrc` and now all is working (almost) fine.
+
+# Why almost?
+
+Well: it's surely not related to git-annex but to my hosting server.
+
+Every time I get some file from the remote on that hosting space I get an error
+     
+     ERROR: ld.so: object '/lib/security/hosting-securize.so' from /etc/ld.so.preload cannot be preloaded (wrong ELF class: ELFCLASS32): ignored.
+
+but fortunately it is ignored and the files are downloaded as expected
+
+I still had no time to investigate why I get a ELFCLASS32 (I'm sure I installed the amd64 standalone)... but since it works I leave it as a background wishlist
+
+# The end
+
+That's all, I hope this will help others with similar issues
+
+Bye!
+Giovanni Biscuolo  
+"""]]

Added a comment
diff --git a/doc/git-annex-find/comment_4_d12f5b9eddd889cdf8deb5024d83088d._comment b/doc/git-annex-find/comment_4_d12f5b9eddd889cdf8deb5024d83088d._comment
new file mode 100644
index 000000000..8f19c0e17
--- /dev/null
+++ b/doc/git-annex-find/comment_4_d12f5b9eddd889cdf8deb5024d83088d._comment
@@ -0,0 +1,13 @@
+[[!comment format=mdwn
+ username="disteph@02005197c6b0e3d92255823d62c08dbe6d7a4d52"
+ nickname="disteph"
+ avatar="http://cdn.libravatar.org/avatar/a12e6e0852d5a1985b8684b17202561c"
+ subject="comment 4"
+ date="2018-10-18T08:25:34Z"
+ content="""
+> You can use `git annex findref master` in a bare repository, which is like find but operates on some branch.
+>
+> I am not convinced that find --all would really be that useful, since it would have to display keys and not filenames, and find is all about displaying filenames. I did make find error out in a bare repo rather than not doing anything.
+
+Thanks for the quick answer and for the tip. `findref` still displays file names, so OK, I can pipe the output with `lookupkey` to have the corresponding list of keys. Still, my understanding is that the computation is not the same as a potential `find --all` (or `find` on bare repos), in the sense that commands like `move --all` (or `move` on bare repos) only scan the files that are present in the repo, whereas `git annex findref master` looks at the whole branch regardless of where the files are. Sure, I can filter it with `findref master --in=here`, but the computational cost wouldn't be the same, would it? (imagining that my repo contains orders of magnitude fewer files than the branch) Also, `move --all` catches past versions of files that are still in the repo, i.e. \"unused files\", whereas I guess `findref master --in=here` would miss them? It's just that commands like `move --all` start by doing the job I want before taking an action on the files, so I just wish there was a \"no-action\" version of them. A `--dry-run` option in `move` and `copy` would be good enough. I tried to trick the `move` command with a `move --all ... --from=here --to=here` but of course I was outsmarted by the command :-)
+"""]]

Added a comment: Synology NAS 6.2.1-23824
diff --git a/doc/bugs/Synology_NAS__58___timer__95__create__58___Bad_address/comment_8_902afcef5ad9c3f2a80d5df1ce99e1d5._comment b/doc/bugs/Synology_NAS__58___timer__95__create__58___Bad_address/comment_8_902afcef5ad9c3f2a80d5df1ce99e1d5._comment
new file mode 100644
index 000000000..ef55f1a66
--- /dev/null
+++ b/doc/bugs/Synology_NAS__58___timer__95__create__58___Bad_address/comment_8_902afcef5ad9c3f2a80d5df1ce99e1d5._comment
@@ -0,0 +1,62 @@
+[[!comment format=mdwn
+ username="ewen"
+ avatar="http://cdn.libravatar.org/avatar/605b2981cb52b4af268455dee7a4f64e"
+ subject="Synology NAS 6.2.1-23824"
+ date="2018-10-18T00:00:34Z"
+ content="""
+FTR, Synology finally released the NAS DSM 6.2.1-23824 (OS) software to my region (New Zealand; last I assume) so I've been able to install the September software update.  That does work with the 64-bit Git Annex standalone version, providing the `LC_ALL=C` workaround is still in place:
+
+    ewen@nas01:~$ git-annex version
+    rm: loadlocale.c:129: _nl_intern_locale_data: Assertion `cnt < (sizeof (_nl_value_type_LC_TIME) / sizeof (_nl_value_type_LC_TIME[0]))' failed.
+    /volume1/thirdparty/git-annex.linux/runshell: line 132: 14602 Aborted                 rm -rf \"$localecache\" 2>&1
+    cmp: loadlocale.c:129: _nl_intern_locale_data: Assertion `cnt < (sizeof (_nl_value_type_LC_TIME) / sizeof (_nl_value_type_LC_TIME[0]))' failed.
+    /volume1/thirdparty/git-annex.linux/runshell: line 142: 14603 Aborted                 cmp \"$LOCPATH/buildid\" \"$base/buildid\" > /dev/null
+    rm: loadlocale.c:129: _nl_intern_locale_data: Assertion `cnt < (sizeof (_nl_value_type_LC_TIME) / sizeof (_nl_value_type_LC_TIME[0]))' failed.
+    /volume1/thirdparty/git-annex.linux/runshell: line 142: 14604 Aborted                 rm -rf \"$LOCPATH\"
+    ewen@nas01:~$ LC_ALL=C git-annex version
+    git-annex version: 6.20180807-g48d11a5df
+    build flags: Assistant Webapp Pairing S3(multipartupload)(storageclasses) WebDAV Inotify DBus DesktopNotify ConcurrentOutput TorrentParser MagicMime Feeds Testsuite
+    dependency versions: aws-0.19 bloomfilter-2.0.1.0 cryptonite-0.25 DAV-1.3.2 feed-1.0.0.0 ghc-8.2.2 http-client-0.5.13 persistent-sqlite-2.8.1.2 torrent-10000.1.1 uuid-1.3.13 yesod-1.6.0
+    key/value backends: SHA256E SHA256 SHA512E SHA512 SHA224E SHA224 SHA384E SHA384 SHA3_256E SHA3_256 SHA3_512E SHA3_512 SHA3_224E SHA3_224 SHA3_384E SHA3_384 SKEIN256E SKEIN256 SKEIN512E SKEIN512 BLAKE2B256E BLAKE2B256 BLAKE2B512E BLAKE2B512 BLAKE2B160E BLAKE2B160 BLAKE2B224E BLAKE2B224 BLAKE2B384E BLAKE2B384 BLAKE2S256E BLAKE2S256 BLAKE2S160E BLAKE2S160 BLAKE2S224E BLAKE2S224 BLAKE2SP256E BLAKE2SP256 BLAKE2SP224E BLAKE2SP224 SHA1E SHA1 MD5E MD5 WORM URL
+    remote types: git gcrypt p2p S3 bup directory rsync web bittorrent webdav adb tahoe glacier ddar hook external
+    operating system: linux x86_64
+    supported repository versions: 3 5 6
+    upgrade supported from repository versions: 0 1 2 3 4 5
+    ewen@nas01:~$ 
+
+so at least for now I'm leaving my hand-edited work around in place:
+
+    ewen@nas01:~$ grep -B 1 LC_ALL /usr/local/bin/git-annex
+    # 2018-09-08 - work around for LC_TIME mismatch in locales
+    LC_ALL=C
+    export LC_ALL
+    ewen@nas01:~$ 
+
+Interestingly I hadn't noticed previously that it seems like its `rm` and `cmp` and the like which are running into locale loading problems, at least now.  Ironically line 132 is the point where it tries to clean up locale caches...
+
+    # Clean up locale caches when their standalone bundle no longer exists.
+    for localecache in $HOME/.cache/git-annex/locales/*; do
+        cachebase=$(cat \"$localecache/base\" 2>/dev/null || true)
+        if [ ! -d \"$cachebase\" ] || ! cmp \"$localecache/buildid\" \"$cachebase/buildid\" >/dev/null ; then
+            rm -rf \"$localecache\" 2>&1 || true
+        fi
+    done
+
+and 142 is the bit that tries to refresh the locale cache:
+
+    # If the locale cache for this bundle is out of date, refresh it.
+    if [ -e \"$LOCPATH/buildid\" ] && ! cmp \"$LOCPATH/buildid\" \"$base/buildid\" >/dev/null ; then
+        rm -rf \"$LOCPATH\"
+    fi
+    if ! mkdir -p \"$LOCPATH\"; then
+        echo \"Unable to write to $LOCPATH; can't continue!\" >&2
+        exit 1
+    fi
+    echo \"$base\" > \"$LOCPATH/base\"
+    cp \"$base/buildid\" \"$LOCPATH/buildid\"
+
+
+so it's possible the *new* issue might just be that bits of the git annex work around for locale issues are now unreachable... due to locale issues.  In which case maybe only the work around step needs `LC_ALL=C`?  I haven't experimented with that, but it does seem plausible that if it can get far enough to build/use locales in the right format for its own libc, that it'd then work properly.
+
+Ewen
+"""]]

Added a comment: Thanks
diff --git a/doc/forum/Unable_to_change_RSS_feeds/comment_2_9ed0f746a199bb0ce474b2e9fa4f0a9e._comment b/doc/forum/Unable_to_change_RSS_feeds/comment_2_9ed0f746a199bb0ce474b2e9fa4f0a9e._comment
new file mode 100644
index 000000000..6c450fbbb
--- /dev/null
+++ b/doc/forum/Unable_to_change_RSS_feeds/comment_2_9ed0f746a199bb0ce474b2e9fa4f0a9e._comment
@@ -0,0 +1,28 @@
+[[!comment format=mdwn
+ username="Gus"
+ avatar="http://cdn.libravatar.org/avatar/665626c67ab3ee7e842183f6f659e120"
+ subject="Thanks"
+ date="2018-10-17T22:46:36Z"
+ content="""
+Hello and thank you for taking an interest and offering your time to help me out, Joey.
+
+I keep a file with a list of podcasts I follow and the relevant (old) URL in it is `https://rss.art19.com/freakonomics-radio`. I import them all with `xargs git annex importfeed --relaxed --fast --template='${feedtitle}/${itempubdate}-${itemtitle}${extension}' < feeds.txt`..
+
+It seems that some files that are referenced in this RSS feed are no longer valid.
+
+    $ git-annex info 2014_10_16-How_Can_Tiny_Norway_Afford_to_Buy_So_Many_Teslas____.mp3
+    file: 2014_10_16-How_Can_Tiny_Norway_Afford_to_Buy_So_Many_Teslas____.mp3
+    size: 0 bytes (+ 1 unknown size)
+    key: URL--http://feedproxy.google.com/,12-63d190ce967f261870566fc1551cb690
+    present: false
+
+I tried to find another RSS feed for this show and came across the more \"official\" `http://freakonomics.com/feed/`.
+
+This was all quite some time ago and I don't recall many details. Since those days I managed to get around this by downloading the files from the archives. It may also be that the feeds have changed since then. I have also upgraded my system (including the version of git-annex), which was kept back many months.
+I was still downloading the old files that I do not see in the RSS feeds now — this may be related to the problem.
+
+The `addurl` does seem to work now, and I can't reproduce the problem I had back then. I'll take this off the table.
+Yet, I do wish that `info` would mention all the URLs associated to the file. It would help pinpoint the problem in such a situation. I still don't know if the importfeed is doing its thing (adding URLS) or not.
+
+Anyway, once more, my appreciation for your interest, your time and your work.
+"""]]

Added a comment: Thanks
diff --git a/doc/forum/Locating_errors_on_fsck/comment_2_0277bac79694efffba0e59706aa66c63._comment b/doc/forum/Locating_errors_on_fsck/comment_2_0277bac79694efffba0e59706aa66c63._comment
new file mode 100644
index 000000000..291cfa049
--- /dev/null
+++ b/doc/forum/Locating_errors_on_fsck/comment_2_0277bac79694efffba0e59706aa66c63._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="Gus"
+ avatar="http://cdn.libravatar.org/avatar/665626c67ab3ee7e842183f6f659e120"
+ subject="Thanks"
+ date="2018-10-17T22:34:20Z"
+ content="""
+Thank you for your reply. It was quite helpful.
+"""]]

Added a comment
diff --git a/doc/bugs/v6_hardlinking_is_not_stable_across_lock__47__unlock_or_cloning/comment_1_029e49d631afad4e2a76f3082d20f20e._comment b/doc/bugs/v6_hardlinking_is_not_stable_across_lock__47__unlock_or_cloning/comment_1_029e49d631afad4e2a76f3082d20f20e._comment
new file mode 100644
index 000000000..5f3ef2c29
--- /dev/null
+++ b/doc/bugs/v6_hardlinking_is_not_stable_across_lock__47__unlock_or_cloning/comment_1_029e49d631afad4e2a76f3082d20f20e._comment
@@ -0,0 +1,9 @@
+[[!comment format=mdwn
+ username="andrey_utkin@49e37627b3060c40292113d73d7ffbf317233e62"
+ nickname="andrey_utkin"
+ avatar="http://cdn.libravatar.org/avatar/95bb7f4f7647cc24c1cf635b61578842"
+ subject="comment 1"
+ date="2018-10-17T22:07:15Z"
+ content="""
+Have just repeated same commands in a new release 6.20181011, same behaviour.
+"""]]

diff --git a/doc/bugs/v6_hardlinking_is_not_stable_across_lock__47__unlock_or_cloning.mdwn b/doc/bugs/v6_hardlinking_is_not_stable_across_lock__47__unlock_or_cloning.mdwn
new file mode 100644
index 000000000..220c6306e
--- /dev/null
+++ b/doc/bugs/v6_hardlinking_is_not_stable_across_lock__47__unlock_or_cloning.mdwn
@@ -0,0 +1,379 @@
+### Please describe the problem.
+
+Can't find an approach to file permissions mode to get thin v6 annex repo to hold no second copies.
+
+I realize that hardlinks work in such a way that all links have same permissions mode. The issue is, which mode for files I should set to always get hardlinks?
+`git-annex` seems to prefer 555 for `.git/annex/objects/` files, but appears it can create e.g. 644 when copying from remote.
+`git` remembers file modes as either 755 or 644, so after `git annex lock; git annex unlock` cycle or `git annex fix` no file is hardlinked if `.git/annex/objects/` file mode is 555.
+
+### What steps will reproduce the problem?
+
+* Create a new git-annex repo. v6, thin.
+* Create few files with same content but different perms (e.g. 555, 755, 644).
+* Add and commit these files to annex.
+* Observe that in this repo, 0555-mode file is hardlinked.
+* Clone this repo
+* Init annex in the second repo to also be v6 thin.
+* Fetch the annex files to second repo.
+* Observe that in the new repo, 0644-mode file is hardlinked.
+* Try to figure out which permissions to use across the repo to always have hardlinks.
+
+### What version of git-annex are you using? On what operating system?
+
+6.20180926. Gentoo Linux. Manually corrected ebuild based on the one in `haskell` overlay.
+
+### Please provide any additional information below.
+
+[[!format sh """
+ $ git init annex_perm_issue
+Initialized empty Git repository in /home/j/annex_perm_issue/.git/
+[OK]
+21:44:11 Wed 17 Oct j@undo-autkin ~
+ $ cd annex_perm_issue
+[OK]
+21:44:13 Wed 17 Oct j@undo-autkin ~/annex_perm_issue
+ $ git annex init --version=6
+init  ok
+(recording state in git...)
+[OK]
+21:45:09 Wed 17 Oct j@undo-autkin ~/annex_perm_issue
+ $ ls
+[OK]
+21:45:12 Wed 17 Oct j@undo-autkin ~/annex_perm_issue
+ $ v 755
+[OK]
+21:45:25 Wed 17 Oct j@undo-autkin ~/annex_perm_issue
+ $ cp 755 644
+[OK]
+21:45:32 Wed 17 Oct j@undo-autkin ~/annex_perm_issue
+ $ cp 755 555
+[OK]
+21:45:36 Wed 17 Oct j@undo-autkin ~/annex_perm_issue
+ $ chmod 755 755
+[OK]
+21:45:42 Wed 17 Oct j@undo-autkin ~/annex_perm_issue
+ $ chmod 555 555
+[OK]
+21:45:45 Wed 17 Oct j@undo-autkin ~/annex_perm_issue
+ $ chmod 644 644
+[OK]
+21:45:50 Wed 17 Oct j@undo-autkin ~/annex_perm_issue
+ $ ls -l
+total 12
+-r-xr-xr-x. 1 j j 5 Oct 17 21:45 555
+-rw-r--r--. 1 j j 5 Oct 17 21:45 644
+-rwxr-xr-x. 1 j j 5 Oct 17 21:45 755
+[OK]
+21:45:52 Wed 17 Oct j@undo-autkin ~/annex_perm_issue
+ $ md5sum *
+d8e8fca2dc0f896fd7cb4cb0031ba249  555
+d8e8fca2dc0f896fd7cb4cb0031ba249  644
+d8e8fca2dc0f896fd7cb4cb0031ba249  755
+[OK]
+21:46:00 Wed 17 Oct j@undo-autkin ~/annex_perm_issue
+ $ git config annex.thin true
+[OK]
+21:47:08 Wed 17 Oct j@undo-autkin ~/annex_perm_issue
+ $ g add *
+[OK]
+21:47:17 Wed 17 Oct j@undo-autkin ~/annex_perm_issue
+ $ ls -l
+total 12
+-r-xr-xr-x. 2 j j 5 Oct 17 21:45 555
+-rw-r--r--. 1 j j 5 Oct 17 21:45 644
+-rwxr-xr-x. 1 j j 5 Oct 17 21:45 755
+[OK]
+21:47:20 Wed 17 Oct j@undo-autkin ~/annex_perm_issue
+ $ g su
+On branch master
+
+No commits yet
+
+Changes to be committed:
+  (use "git rm --cached <file>..." to unstage)
+
+        new file:   555
+        new file:   644
+        new file:   755
+
+Untracked files not listed (use -u option to show untracked files)
+[OK]
+21:47:23 Wed 17 Oct j@undo-autkin ~/annex_perm_issue
+ $ g ci -m 'adding all'
+(recording state in git...)
+[master (root-commit) d03ede4] adding all
+ 3 files changed, 3 insertions(+)
+ create mode 100755 555
+ create mode 100644 644
+ create mode 100755 755
+[OK]
+21:48:16 Wed 17 Oct j@undo-autkin ~/annex_perm_issue
+ $ ls -l
+total 12
+-r-xr-xr-x. 2 j j 5 Oct 17 21:45 555
+-rw-r--r--. 1 j j 5 Oct 17 21:45 644
+-rwxr-xr-x. 1 j j 5 Oct 17 21:45 755
+[OK]
+21:48:20 Wed 17 Oct j@undo-autkin ~/annex_perm_issue
+ $ ls -l .git/annex/objects/
+total 4
+drwxr-xr-x. 3 j j 4096 Oct 17 21:47 w8
+[OK]
+21:48:33 Wed 17 Oct j@undo-autkin ~/annex_perm_issue
+ $ ls -l .git/annex/objects/w8/
+total 4
+drwxr-xr-x. 3 j j 4096 Oct 17 21:47 pv
+[OK]
+21:48:34 Wed 17 Oct j@undo-autkin ~/annex_perm_issue
+ $ ls -l .git/annex/objects/w8/pv/
+total 4
+dr-xr-xr-x. 2 j j 4096 Oct 17 21:47 SHA256E-s5--f2ca1bb6c7e907d06dafe4687e579fce76b37e4e93b7605022da52e6ccc26fd2
+[OK]
+21:48:35 Wed 17 Oct j@undo-autkin ~/annex_perm_issue
+ $ ls -l
+total 12
+-r-xr-xr-x. 2 j j 5 Oct 17 21:45 555
+-rw-r--r--. 1 j j 5 Oct 17 21:45 644
+-rwxr-xr-x. 1 j j 5 Oct 17 21:45 755
+[OK]
+21:49:41 Wed 17 Oct j@undo-autkin ~/annex_perm_issue
+ $ git annex lock .
+lock 555 ok
+lock 644 ok
+lock 755 ok
+(recording state in git...)
+[OK]
+21:49:45 Wed 17 Oct j@undo-autkin ~/annex_perm_issue
+ $ ls -l
+total 12
+lrwxrwxrwx. 1 j j 178 Oct 17 21:45 555 -> .git/annex/objects/w8/pv/SHA256E-s5--f2ca1bb6c7e907d06dafe4687e579fce76b37e4e93b7605022da52e6ccc26fd2/SHA256E-s5--f2ca1bb6c7e907d06dafe4687e579fce76b37e4e93b7605022da52e6ccc26fd2
+lrwxrwxrwx. 1 j j 178 Oct 17 21:45 644 -> .git/annex/objects/w8/pv/SHA256E-s5--f2ca1bb6c7e907d06dafe4687e579fce76b37e4e93b7605022da52e6ccc26fd2/SHA256E-s5--f2ca1bb6c7e907d06dafe4687e579fce76b37e4e93b7605022da52e6ccc26fd2
+lrwxrwxrwx. 1 j j 178 Oct 17 21:45 755 -> .git/annex/objects/w8/pv/SHA256E-s5--f2ca1bb6c7e907d06dafe4687e579fce76b37e4e93b7605022da52e6ccc26fd2/SHA256E-s5--f2ca1bb6c7e907d06dafe4687e579fce76b37e4e93b7605022da52e6ccc26fd2
+[OK]
+21:49:47 Wed 17 Oct j@undo-autkin ~/annex_perm_issue
+ $ git annex unlock .
+unlock 555 ok
+unlock 644 ok
+unlock 755 ok
+(recording state in git...)
+[OK]
+21:49:52 Wed 17 Oct j@undo-autkin ~/annex_perm_issue
+ $ ls -l
+total 12
+-rwxr-xr-x. 1 j j 5 Oct 17 21:45 555
+-rwxr-xr-x. 1 j j 5 Oct 17 21:45 644
+-rwxr-xr-x. 1 j j 5 Oct 17 21:45 755
+[OK]
+21:49:53 Wed 17 Oct j@undo-autkin ~/annex_perm_issue
+ $ git annex fix .
+fix 555 ok
+fix 644 ok
+fix 755 ok
+[OK]
+21:50:01 Wed 17 Oct j@undo-autkin ~/annex_perm_issue
+ $ ls -l
+total 12
+-rwxr-xr-x. 1 j j 5 Oct 17 21:45 555
+-rwxr-xr-x. 1 j j 5 Oct 17 21:45 644
+-rwxr-xr-x. 1 j j 5 Oct 17 21:45 755
+[OK]
+21:50:02 Wed 17 Oct j@undo-autkin ~/annex_perm_issue
+ $ ls -l .git/annex/objects/w8/pv/SHA256E-s5--f2ca1bb6c7e907d06dafe4687e579fce76b37e4e93b7605022da52e6ccc26fd2/
+total 4
+-r-xr-xr-x. 1 j j 5 Oct 17 21:45 SHA256E-s5--f2ca1bb6c7e907d06dafe4687e579fce76b37e4e93b7605022da52e6ccc26fd2
+[OK]
+21:50:08 Wed 17 Oct j@undo-autkin ~/annex_perm_issue
+ $ git show | cat
+commit d03ede4f1a8b2ba3967a9aae005030cea408e3a5
+Author: Andrey Utkin <andrey_utkin@fastmail.com>
+Date:   Wed Oct 17 21:48:16 2018 +0100
+
+    adding all
+
+diff --git a/555 b/555
+new file mode 100755

(Diff truncated)
devblog
diff --git a/doc/devblog/day_547__v6_almost_complete.mdwn b/doc/devblog/day_547__v6_almost_complete.mdwn
new file mode 100644
index 000000000..3e8cbe8c2
--- /dev/null
+++ b/doc/devblog/day_547__v6_almost_complete.mdwn
@@ -0,0 +1,12 @@
+No time to blog yesterday, but I somehow found the time to fix the second
+to last known major issue with v6 mode, a database inconsistency problem
+involving touching annexed files.
+
+The only remaining blocker for v6 not being experimental is that `git
+checkout` of large unlocked files can use a lot of memory (and doesn't
+honor annex.thin).
+
+Also I finally have a rought plan for how to [[todo/hide_missing_files]]:
+Have `git annex sync` update the working tree to only show visible files.
+Still details to work out, but it would be great to finally get this
+often-requested feature.

diff --git a/doc/forum/Unlocking_files_gives_symlink_content.mdwn b/doc/forum/Unlocking_files_gives_symlink_content.mdwn
index 161d0ef5c..ec341c7d9 100644
--- a/doc/forum/Unlocking_files_gives_symlink_content.mdwn
+++ b/doc/forum/Unlocking_files_gives_symlink_content.mdwn
@@ -1,4 +1,4 @@
-I am just beginning to use git-annex so it is possible that the following issue was caused by my own mistake. It cropped after commiting a number of files that had been moved between subfolders, and added with `git add -A` etc.
+I am just beginning to use git-annex so it is possible that the following issue was caused by my own mistake. It cropped up after commiting a number of files that had been moved between subfolders, and added with `git add -A` etc.
 
 When files are locked, I am able to view their contents. However, when I unlock certain files, their contents appear to be replaced by the contents of the symlink. Locking them again allows me to view their contents. For instance, with one unlocked file, say `test.md`, I get
 

removed
diff --git a/doc/forum/Unlocking_files_gives_symlink_content/comment_3_8cc3f8ea1672e7323e2bc054c57e6c63._comment b/doc/forum/Unlocking_files_gives_symlink_content/comment_3_8cc3f8ea1672e7323e2bc054c57e6c63._comment
deleted file mode 100644
index 33bd170f2..000000000
--- a/doc/forum/Unlocking_files_gives_symlink_content/comment_3_8cc3f8ea1672e7323e2bc054c57e6c63._comment
+++ /dev/null
@@ -1,11 +0,0 @@
-[[!comment format=mdwn
- username="erewhon_smith@6671dff14d578cb6d55a3ca285f2c54151b69f60"
- nickname="erewhon_smith"
- avatar="http://cdn.libravatar.org/avatar/b9bd5ad7176ebe149d0f051dcfe0a63e"
- subject="comment 2"
- date="2018-10-17T18:46:17Z"
- content="""
-Joey, thanks for the response, not to mention also for this brilliant piece of software. I understand version 6 still being experimental.
-
-Do you have any thoughts on how I can repair my repository at this point so that unlocking files gives me back their contents?
-"""]]

Added a comment: comment 2
diff --git a/doc/forum/Unlocking_files_gives_symlink_content/comment_3_8cc3f8ea1672e7323e2bc054c57e6c63._comment b/doc/forum/Unlocking_files_gives_symlink_content/comment_3_8cc3f8ea1672e7323e2bc054c57e6c63._comment
new file mode 100644
index 000000000..33bd170f2
--- /dev/null
+++ b/doc/forum/Unlocking_files_gives_symlink_content/comment_3_8cc3f8ea1672e7323e2bc054c57e6c63._comment
@@ -0,0 +1,11 @@
+[[!comment format=mdwn
+ username="erewhon_smith@6671dff14d578cb6d55a3ca285f2c54151b69f60"
+ nickname="erewhon_smith"
+ avatar="http://cdn.libravatar.org/avatar/b9bd5ad7176ebe149d0f051dcfe0a63e"
+ subject="comment 2"
+ date="2018-10-17T18:46:17Z"
+ content="""
+Joey, thanks for the response, not to mention also for this brilliant piece of software. I understand version 6 still being experimental.
+
+Do you have any thoughts on how I can repair my repository at this point so that unlocking files gives me back their contents?
+"""]]

Added a comment
diff --git a/doc/forum/Unlocking_files_gives_symlink_content/comment_2_f50b8ef54737798183490d5a660248f2._comment b/doc/forum/Unlocking_files_gives_symlink_content/comment_2_f50b8ef54737798183490d5a660248f2._comment
new file mode 100644
index 000000000..a3a1df0e7
--- /dev/null
+++ b/doc/forum/Unlocking_files_gives_symlink_content/comment_2_f50b8ef54737798183490d5a660248f2._comment
@@ -0,0 +1,11 @@
+[[!comment format=mdwn
+ username="erewhon_smith@6671dff14d578cb6d55a3ca285f2c54151b69f60"
+ nickname="erewhon_smith"
+ avatar="http://cdn.libravatar.org/avatar/b9bd5ad7176ebe149d0f051dcfe0a63e"
+ subject="comment 2"
+ date="2018-10-17T18:45:59Z"
+ content="""
+Joey, thanks for the response, not to mention also for this brilliant piece of software. I understand version 6 still being experimental.
+
+Do you have any thoughts on how I can repair my repository at this point so that unlocking files gives me back their contents?
+"""]]

more thoughts
diff --git a/doc/todo/hide_missing_files/comment_3_a9590ef65875a68eb1d1d7becc98b8b8._comment b/doc/todo/hide_missing_files/comment_3_a9590ef65875a68eb1d1d7becc98b8b8._comment
new file mode 100644
index 000000000..fe7e9bae6
--- /dev/null
+++ b/doc/todo/hide_missing_files/comment_3_a9590ef65875a68eb1d1d7becc98b8b8._comment
@@ -0,0 +1,32 @@
+[[!comment format=mdwn
+ username="joey"
+ subject="""comment 3"""
+ date="2018-10-17T15:50:46Z"
+ content="""
+This will need some state maintained, to allow efficiently querying for
+worktree files that have gained/lost content since the last sync.
+
+At least need to maintain a map of all keys that were gained/lost since
+last time.
+
+It would be easy to loop through `git ls-tree` of the master branch,
+look up all the keys with `git cat-file`, and find in the map.
+But slow...
+
+Better would be to maintain an additional map from filename to key.
+
+The keys database already maintains a map from key to worktree file
+(and back), but only in v6 mode, and only for unlocked files.
+Not useful for this.
+
+This would need anything that changes annex pointers
+(fix/unlock/lock/pre-commit) to update the map. Would also need to make
+sure that it gets updated with any changes to the checked out branch
+made by git commit or git-annex sync. Doable, but complicated.
+
+Or, the map could be of the sha1s of the annex pointers, then loop
+through `git ls-files --stage` and look up the sha1s in the map
+would not be too slow. On my laptop, with 85000 files in the tree, 
+that command takes 0.13s. Still needs to update the map whenever
+annex pointers are changed though.
+"""]]
diff --git a/doc/todo/smudge.mdwn b/doc/todo/smudge.mdwn
index 664cf7174..ea5b00ac3 100644
--- a/doc/todo/smudge.mdwn
+++ b/doc/todo/smudge.mdwn
@@ -25,17 +25,6 @@ git-annex should use smudge/clean filters. v6 mode
   (My enhanced smudge/clean patch set also fixed this problem, in a much
   nicer way...)
 
-## other warts
-
-* There are several v6 bugs that are edge cases and
-  need more info or analysis. None of these seem like blockers
-  to keep v6 experimental or to replacing direct mode with v6.
-
-  - <http://git-annex.branchable.com/bugs/assistant_crashes_in_TransferScanner/>
-  - <http://git-annex.branchable.com/bugs/v6_appears_to_not_thin/>
-  - <http://git-annex.branchable.com/bugs/Metadata_views_in_v6_repo_upgraded_from_direct_mode_act_strangely/>a
-  - <http://git-annex.branchable.com/bugs/git-annex-sync_sometimes_fails_in_submodule_in_V6_adjusted_branch/>
-
 * When git runs the smudge filter, it buffers all its output in ram before
   writing it to a file. So, checking out a branch with a large v6 unlocked files
   can cause git to use a lot of memory.
@@ -51,6 +40,18 @@ git-annex should use smudge/clean filters. v6 mode
 
   The annex.thin idea above could work around this problem.
 
+
+## other warts
+
+* There are several v6 bugs that are edge cases and
+  need more info or analysis. None of these seem like blockers
+  to keep v6 experimental or to replacing direct mode with v6.
+
+  - <http://git-annex.branchable.com/bugs/assistant_crashes_in_TransferScanner/>
+  - <http://git-annex.branchable.com/bugs/v6_appears_to_not_thin/>
+  - <http://git-annex.branchable.com/bugs/Metadata_views_in_v6_repo_upgraded_from_direct_mode_act_strangely/>
+  - <http://git-annex.branchable.com/bugs/git-annex-sync_sometimes_fails_in_submodule_in_V6_adjusted_branch/>
+
 ### long term todos
 
 * Potentially: Use git's new `filter.<driver>.process` interface, which will

v6: Fix database inconsistency
That could cause git-annex to get confused about whether a locked file's
content was present, when the object file got touched.
Unfortunately this means more work sometimes when annex.thin is set,
since it has to checksum the file to tell if it's still got the right
content.
Had to suppress output when inAnnex calls isUnmodified, otherwise
"(checksum...)" would be printed in places it ought not to be,
eg "git annex get" could turn out not need to get anything, and
so only display that.
This commit was sponsored by Ole-Morten Duesund on Patreon.
diff --git a/Annex/Content.hs b/Annex/Content.hs
index 5d657cac2..e814b0c63 100644
--- a/Annex/Content.hs
+++ b/Annex/Content.hs
@@ -97,29 +97,29 @@ inAnnex key = inAnnexCheck key $ liftIO . doesFileExist
 inAnnexCheck :: Key -> (FilePath -> Annex Bool) -> Annex Bool
 inAnnexCheck key check = inAnnex' id False check key
 
-{- inAnnex that performs an arbitrary check of the key's content.
- -
- - When the content is unlocked, it must also be unmodified, or the bad
- - value will be returned.
- -
- - In direct mode, at least one of the associated files must pass the
- - check. Additionally, the file must be unmodified.
- -}
+{- inAnnex that performs an arbitrary check of the key's content. -}
 inAnnex' :: (a -> Bool) -> a -> (FilePath -> Annex a) -> Key -> Annex a
 inAnnex' isgood bad check key = withObjectLoc key checkindirect checkdirect
   where
 	checkindirect loc = do
 		r <- check loc
 		if isgood r
-			then do
-				cache <- Database.Keys.getInodeCaches key
-				if null cache
-					then return r
-					else ifM (sameInodeCache loc cache)
-						( return r
-						, return bad
-						)
+			then ifM (annexThin <$> Annex.getGitConfig)
+				-- When annex.thin is set, the object file
+				-- could be modified; make sure it's not.
+				-- (Suppress any messages about
+				-- checksumming, to avoid them cluttering
+				-- the display.)
+				( ifM (doQuietAction $ isUnmodified key loc)
+					( return r
+					, return bad
+					)
+				, return r
+				)
 			else return bad
+ 
+	-- In direct mode, at least one of the associated files must pass the
+	-- check. Additionally, the file must be unmodified.
 	checkdirect [] = return bad
 	checkdirect (loc:locs) = do
 		r <- check loc
@@ -750,9 +750,17 @@ isUnmodified key f = go =<< geti
 	cheapcheck fc = anyM (compareInodeCaches fc)
 		=<< Database.Keys.getInodeCaches key
 	expensivecheck fc = ifM (verifyKeyContent RetrievalAllKeysSecure AlwaysVerify UnVerified key f)
-		-- The file could have been modified while it was
-		-- being verified. Detect that.
-		( geti >>= maybe (return False) (compareInodeCaches fc)
+		( do
+			-- The file could have been modified while it was
+			-- being verified. Detect that.
+			ifM (geti >>= maybe (return False) (compareInodeCaches fc))
+				( do
+					-- Update the InodeCache to avoid
+					-- performing this expensive check again.
+					Database.Keys.addInodeCaches key [fc]
+					return True
+				, return False
+				)
 		, return False
 		)
 	geti = withTSDelta (liftIO . genInodeCache f)
diff --git a/CHANGELOG b/CHANGELOG
index 0a83f1e47..f0021ee1b 100644
--- a/CHANGELOG
+++ b/CHANGELOG
@@ -7,6 +7,8 @@ git-annex (6.20181012) UNRELEASED; urgency=medium
   * Webapp: Fix termux detection.
   * runshell: Use system locales when built with 
     GIT_ANNEX_PACKAGE_INSTALL set. (For Neurodebian packages.)
+  * v6: Fix database inconsistency that could cause git-annex to
+    get confused about whether a locked file's content was present.
 
  -- Joey Hess <id@joeyh.name>  Sat, 13 Oct 2018 00:52:02 -0400
 
diff --git a/Messages.hs b/Messages.hs
index d5dee72e2..9e33bd776 100644
--- a/Messages.hs
+++ b/Messages.hs
@@ -16,6 +16,7 @@ module Messages (
 	showSideAction,
 	doSideAction,
 	doQuietSideAction,
+	doQuietAction,
 	showStoringStateAction,
 	showOutput,
 	showLongNote,
@@ -111,11 +112,27 @@ doSideAction :: Annex a -> Annex a
 doSideAction = doSideAction' StartBlock
 
 doSideAction' :: SideActionBlock -> Annex a -> Annex a
-doSideAction' b a = do
-	o <- Annex.getState Annex.output
-	set $ o { sideActionBlock = b }
-	set o `after` a
+doSideAction' b = bracket setup cleanup . const
   where
+	setup = do
+		o <- Annex.getState Annex.output
+		set $ o { sideActionBlock = b }
+		return o
+	cleanup = set
+	set o = Annex.changeState $ \s -> s { Annex.output = o }
+
+{- Performs an action, suppressing all normal standard output,
+ - but not json output. -}
+doQuietAction :: Annex a -> Annex a
+doQuietAction = bracket setup cleanup . const
+  where
+	setup = do
+		o <- Annex.getState Annex.output
+		case outputType o of
+			NormalOutput -> set $ o { outputType = QuietOutput }
+			_ -> noop
+		return o
+	cleanup = set
 	set o = Annex.changeState $ \s -> s {  Annex.output = o }
 
 {- Make way for subsequent output of a command. -}
diff --git a/doc/bugs/inAnnex_check_failed_repeatedly_for_present_content_v6.mdwn b/doc/bugs/inAnnex_check_failed_repeatedly_for_present_content_v6.mdwn
index 60e145fa3..00c12567b 100644
--- a/doc/bugs/inAnnex_check_failed_repeatedly_for_present_content_v6.mdwn
+++ b/doc/bugs/inAnnex_check_failed_repeatedly_for_present_content_v6.mdwn
@@ -30,6 +30,30 @@ the problem yet. --[[Joey]]
 > 
 > --[[Joey]]
 
+> > When annex.thin is not set, inAnnex does not need to check the inode
+> > cache, and not checking it will avoid this problem.
+> > 
+> > It is necessary for inAnnex to check the inode cache when annex.thin
+> > is set, because then the object file can be a hard link to the working
+> > tree and so modifiable.
+> > 
+> > Checking for link count of 2 and only then checking the inode cache
+> > won't suffice though, because the object file could be modified and then the
+> > worktree file deleted, and then the object file would be modified with
+> > a link count of 1. So with annex.thin, have to always check the inode
+> > cache.
+> > 
+> > So, it seems what has to be done is, when annex.thin is set, check the
+> > inode cache first, if it's unchanged great, but if not, inAnnex would
+> > need to checksum the object file to determine if it's been modified.
+> > So inAnnex gets potentially very much slower for annex.thin, but I can't
+> > see a way around that. --[[Joey]]
+
+> > > Also, I was able to reproduce the repeated get, after unlock; lock;
+> > > touch; fsck and the above change did fix that.
+> > > 
+> > > So, all [[done]]! --[[Joey]]
+
 ## more information needed
 
 If gleachkr comes back to IRC, it would be good to find out:
diff --git a/doc/bugs/v6_unlock_confused_by_touch.mdwn b/doc/bugs/v6_unlock_confused_by_touch.mdwn
index f072e812b..d7abddede 100644
--- a/doc/bugs/v6_unlock_confused_by_touch.mdwn
+++ b/doc/bugs/v6_unlock_confused_by_touch.mdwn
@@ -24,3 +24,5 @@ lock, it does. So, here's a complete reproducer:
 	git annex unlock file
 	cat file
 	/annex/objects/...
+
+> now [[fixed|done]] --[[Joey]]
diff --git a/doc/todo/smudge.mdwn b/doc/todo/smudge.mdwn
index 81402a748..664cf7174 100644
--- a/doc/todo/smudge.mdwn
+++ b/doc/todo/smudge.mdwn
@@ -25,12 +25,6 @@ git-annex should use smudge/clean filters. v6 mode
   (My enhanced smudge/clean patch set also fixed this problem, in a much
   nicer way...)
 
-* <http://git-annex.branchable.com/bugs/inAnnex_check_failed_repeatedly_for_present_content_v6/>
-
-  I have this mostly analized and need to implement the planned fix.
-
-* <http://git-annex.branchable.com/bugs/>
-
 ## other warts
 
 * There are several v6 bugs that are edge cases and

bug report
diff --git a/doc/bugs/v6_unlock_confused_by_touch.mdwn b/doc/bugs/v6_unlock_confused_by_touch.mdwn
new file mode 100644
index 000000000..f072e812b
--- /dev/null
+++ b/doc/bugs/v6_unlock_confused_by_touch.mdwn
@@ -0,0 +1,26 @@
+Touching a locked file in a v6 repository follows the symlink and touches
+the object file. This makes inAnnex's sameInodeCache fail because the keys
+database has a different mtime cached, and so `git annex unlock` doesn't
+populate the file with content, but with a pointer file.
+
+Also, `git annex` fsck complains no copies exist even though the symlink is
+pointing at a copy.
+
+This seems another reason to not check sameInodeCache for locked content,
+along with
+<http://git-annex.branchable.com/bugs/inAnnex_check_failed_repeatedly_for_present_content_v6/>
+--[[Joey]]
+
+Note that after initial  `git annex add` into a v6 repository, the keys
+database does not have an inode cached. But after an unlock followed by a
+lock, it does. So, here's a complete reproducer:
+
+	git annex init --version=6
+	date > file
+	git annex add file
+	git annex unlock file
+	git annex lock file
+	touch file
+	git annex unlock file
+	cat file
+	/annex/objects/...
diff --git a/doc/forum/Unlocking_files_gives_symlink_content/comment_1_f8032a5ea72f2cd833a626a197f94ba2._comment b/doc/forum/Unlocking_files_gives_symlink_content/comment_1_f8032a5ea72f2cd833a626a197f94ba2._comment
new file mode 100644
index 000000000..91091ff90
--- /dev/null
+++ b/doc/forum/Unlocking_files_gives_symlink_content/comment_1_f8032a5ea72f2cd833a626a197f94ba2._comment
@@ -0,0 +1,14 @@
+[[!comment format=mdwn
+ username="joey"
+ subject="""comment 1"""
+ date="2018-10-16T15:25:25Z"
+ content="""
+Please note that repository version 6, which you are using, is still experimental, it has
+known bugs and probably unknown bugs.
+
+I think this is an unknown bug, probably something has gotten inconsistent
+in the keys database and it doesn't realize it has the content.
+
+I found one way to cause this, filed a bug:
+[[bugs/v6_unlock_confused_by_touch]]
+"""]]
diff --git a/doc/todo/smudge.mdwn b/doc/todo/smudge.mdwn
index eae1e3012..81402a748 100644
--- a/doc/todo/smudge.mdwn
+++ b/doc/todo/smudge.mdwn
@@ -29,6 +29,8 @@ git-annex should use smudge/clean filters. v6 mode
 
   I have this mostly analized and need to implement the planned fix.
 
+* <http://git-annex.branchable.com/bugs/>
+
 ## other warts
 
 * There are several v6 bugs that are edge cases and

rename to avoid render as html
diff --git a/doc/Android.mdwn b/doc/Android.mdwn
index 1bbe8d68a..0ac198518 100644
--- a/doc/Android.mdwn
+++ b/doc/Android.mdwn
@@ -13,8 +13,8 @@ git-annex is not currently part of the Termux distribution, but it's easy
 to install it. Paste these commands into Termux:
 
 	pkg install wget
-	wget https://git-annex.branchable.com/install/Android/git-annex-install.sh
-	sh git-annex-install.sh
+	wget https://git-annex.branchable.com/install/Android/git-annex-install
+	sh git-annex-install
 
 ## Starting git-annex
 
@@ -63,4 +63,4 @@ well in the Termux environment.
 
 ## Upgrading
 
-To upgrade to a new git-annex release, just run `git-annex-install.sh` again.
+To upgrade to a new git-annex release, just run `git-annex-install` again.
diff --git a/doc/Android/comment_3_ff03ae378da71c6637959779139ecb12._comment b/doc/Android/comment_3_ff03ae378da71c6637959779139ecb12._comment
new file mode 100644
index 000000000..cf710c89a
--- /dev/null
+++ b/doc/Android/comment_3_ff03ae378da71c6637959779139ecb12._comment
@@ -0,0 +1,11 @@
+[[!comment format=mdwn
+ username="joey"
+ subject="""comment 3"""
+ date="2018-10-16T15:22:19Z"
+ content="""
+Thank you for reporting that, I have fixed the url.
+
+I'd again like to ask that, if you have **any kind of problem or bug** with
+this Android build of git-annex, you open a [[bug report|bugs]] rather than
+posting a problem here.
+"""]]
diff --git a/doc/install/Android/git-annex-install.sh b/doc/install/Android/git-annex-install
similarity index 100%
rename from doc/install/Android/git-annex-install.sh
rename to doc/install/Android/git-annex-install

Added a comment
diff --git a/doc/forum/Photos__44___raw_and_jpeg__58___drop_jpeg_if_raw_is_available/comment_8_b3e9100b92aaed66b22c76141f7c08d5._comment b/doc/forum/Photos__44___raw_and_jpeg__58___drop_jpeg_if_raw_is_available/comment_8_b3e9100b92aaed66b22c76141f7c08d5._comment
new file mode 100644
index 000000000..642ea6adf
--- /dev/null
+++ b/doc/forum/Photos__44___raw_and_jpeg__58___drop_jpeg_if_raw_is_available/comment_8_b3e9100b92aaed66b22c76141f7c08d5._comment
@@ -0,0 +1,14 @@
+[[!comment format=mdwn
+ username="Chris"
+ avatar="http://cdn.libravatar.org/avatar/02b67b7ebace8cb6433504ba9a17d4a4"
+ subject="comment 8"
+ date="2018-10-16T15:15:17Z"
+ content="""
+Hm, the raw converter reads and writes metadata from the “sidecar” xmp files, so it would not work to have it only in git-annex. Therefore, a full sync would be required, but luckily this is one-directional, so it should be possible. I think that's the way to go for me.
+
+Thanks for your effort helping me with my stupid questions :).
+
+And disk space is my main concern here, as mentioned above. I really need solutions since I did not know where to put new images, which unfortunately coincided with the birth of my 2nd child and I caught myself taking less photographs of her because I did not know where to put them (and having them accessible from the photo management/raw converter). Therefore, I decided to finally seriously try git-annex which I watch almost from the beginning of the project.
+
+Thanks again :)
+"""]]

push back on random conversation in release announcements
diff --git a/doc/news/version_6.20181011/comment_5_7dae508c3076b8212f9fdb682180a5ca._comment b/doc/news/version_6.20181011/comment_5_7dae508c3076b8212f9fdb682180a5ca._comment
new file mode 100644
index 000000000..c9d53c9b6
--- /dev/null
+++ b/doc/news/version_6.20181011/comment_5_7dae508c3076b8212f9fdb682180a5ca._comment
@@ -0,0 +1,17 @@
+[[!comment format=mdwn
+ username="joey"
+ subject="""comment 5"""
+ date="2018-10-16T15:05:42Z"
+ content="""
+I'm not sure that a release announment is the best place to discuss a wide
+variety of topics that only happen to have all been included or be released
+to the release?
+
+In fact, I'm pretty sure it's not.
+
+I will say that if you are looking for information about any particular
+line from the changelog for a release, a good technique is to run `git
+blame CHANGELOG`, find the commit for that line, which is generally the
+commit that made the change, and will have significantly more information
+in the command message and/or bug report touched by that commit.
+"""]

Added a comment
diff --git a/doc/git-annex-find/comment_3_29e8f9b05ec786308a83ab6bb2001e38._comment b/doc/git-annex-find/comment_3_29e8f9b05ec786308a83ab6bb2001e38._comment
new file mode 100644
index 000000000..9d4b19147
--- /dev/null
+++ b/doc/git-annex-find/comment_3_29e8f9b05ec786308a83ab6bb2001e38._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="CandyAngel"
+ avatar="http://cdn.libravatar.org/avatar/15c0aade8bec5bf004f939dd73cf9ed8"
+ subject="comment 3"
+ date="2018-10-16T15:05:19Z"
+ content="""
+Just bear in mind that [findref doesn't work with all the matching options](https://git-annex.branchable.com/todo/Support_for_include_matching_option_in_findref/).
+"""]]

remove addition
I understand and sympathize with why this was added here, but the fact
is that this kind of warning is clutter that is going to make it harder
to understand this man page overall; this is not the place to document
internal implementation details of the format of URL keys and more than
it would be the place to document how WORM keys mangle and truncate
filenames, or how the extension of a SHAnE key is chosen. I see that
it did get documented better in backends.mdwn, which is a good place
to document it.
The chance that someone is going to have the same misunderstanding and
happen to see this warning does not justify confusing everyone else
with a warning that is really out of place in this documentation.
diff --git a/doc/git-annex-examinekey.mdwn b/doc/git-annex-examinekey.mdwn
index 739d2fd90..83baa5667 100644
--- a/doc/git-annex-examinekey.mdwn
+++ b/doc/git-annex-examinekey.mdwn
@@ -28,10 +28,6 @@ that can be determined purely by looking at the key.
 
   Also, '\\n' is a newline, '\\000' is a NULL, etc.
 
-  Note that it is not possible to extract the URL from a key created by the
-  URL backend: parts of longer URLs may be represented in the key by a 
-  checksum.
-
 * `--json`
 
   Enable JSON output. This is intended to be parsed by programs that use

response
diff --git a/doc/forum/keys__44___URLs_and_URIs/comment_1_d285566ca97e720a7bb497c0db8cc0c2._comment b/doc/forum/keys__44___URLs_and_URIs/comment_1_d285566ca97e720a7bb497c0db8cc0c2._comment
new file mode 100644
index 000000000..898f6adab
--- /dev/null
+++ b/doc/forum/keys__44___URLs_and_URIs/comment_1_d285566ca97e720a7bb497c0db8cc0c2._comment
@@ -0,0 +1,20 @@
+[[!comment format=mdwn
+ username="joey"
+ subject="""comment 1"""
+ date="2018-10-16T14:46:40Z"
+ content="""
+The main difference is that git-annex will not try to
+download URIs itself, but will try to download URLs.
+
+Also, `git annex whereis` displays any URIs
+claimed by the remote, but not URLs unless
+the remote reponds to WHEREIS by listing them.
+
+URLs/URIs are not recorded with a particular remote
+owning them, but CLAIMURL can be used for a remote to
+claim ownership.
+
+My comment
+<http://git-annex.branchable.com/design/external_special_remote_protocol/#comment-f7b2275dc00920599a108a3e99cab4f2>
+sums it up pretty well, I thought.
+"""]]

prevent find running in bare repo
diff --git a/Command/Find.hs b/Command/Find.hs
index ab4707c91..46b8d9803 100644
--- a/Command/Find.hs
+++ b/Command/Find.hs
@@ -18,7 +18,7 @@ import qualified Utility.Format
 import Utility.DataUnits
 
 cmd :: Command
-cmd = withGlobalOptions [annexedMatchingOptions] $ mkCommand $
+cmd = notBareRepo $ withGlobalOptions [annexedMatchingOptions] $ mkCommand $
 	command "find" SectionQuery "lists available files"
 		paramPaths (seek <$$> optParser)
 
diff --git a/doc/git-annex-find/comment_2_191421867cc01ab920071d13ebcb6293._comment b/doc/git-annex-find/comment_2_191421867cc01ab920071d13ebcb6293._comment
new file mode 100644
index 000000000..195364905
--- /dev/null
+++ b/doc/git-annex-find/comment_2_191421867cc01ab920071d13ebcb6293._comment
@@ -0,0 +1,13 @@
+[[!comment format=mdwn
+ username="joey"
+ subject="""comment 2"""
+ date="2018-10-16T14:40:57Z"
+ content="""
+You can use `git annex findref master` in a bare repository, which is like
+find but operates on some branch.
+
+I am not convinced that find --all would really be that useful, since it
+would have to display keys and not filenames, and find is all about displaying
+filenames. I did make find error out in a bare repo rather than not doing
+anything.
+"""]]

Added a comment: wget link broken
diff --git a/doc/Android/comment_2_7f0caccd085a541b117c8583133e94dd._comment b/doc/Android/comment_2_7f0caccd085a541b117c8583133e94dd._comment
new file mode 100644
index 000000000..0b21d13aa
--- /dev/null
+++ b/doc/Android/comment_2_7f0caccd085a541b117c8583133e94dd._comment
@@ -0,0 +1,10 @@
+[[!comment format=mdwn
+ username="hoxu"
+ avatar="http://cdn.libravatar.org/avatar/95e33a0073f6c06477b3a202f0301dde"
+ subject="wget link broken"
+ date="2018-10-16T14:23:29Z"
+ content="""
+    wget https://git-annex.branchable.com/install/Android/git-annex-install.sh
+
+This seems to download a html.
+"""]]

Added a comment
diff --git a/doc/forum/Photos__44___raw_and_jpeg__58___drop_jpeg_if_raw_is_available/comment_7_88b04371b3906f01c7b33d110838dc71._comment b/doc/forum/Photos__44___raw_and_jpeg__58___drop_jpeg_if_raw_is_available/comment_7_88b04371b3906f01c7b33d110838dc71._comment
new file mode 100644
index 000000000..76f855634
--- /dev/null
+++ b/doc/forum/Photos__44___raw_and_jpeg__58___drop_jpeg_if_raw_is_available/comment_7_88b04371b3906f01c7b33d110838dc71._comment
@@ -0,0 +1,12 @@
+[[!comment format=mdwn
+ username="CandyAngel"
+ avatar="http://cdn.libravatar.org/avatar/15c0aade8bec5bf004f939dd73cf9ed8"
+ subject="comment 7"
+ date="2018-10-16T12:57:55Z"
+ content="""
+git-annex doesn't \"use\" the content of files for anything, except at specific points like deriving the key. You can make it automatically copy metadata from a file into git-annex when added (see [[tips/automatically_adding_metadata]]) but it won't keep them in sync, as far as I know. Personally, I strip metadata from the images entirely and put everything into git-annex's metadata.
+
+I would just make a script which has the behavior you want and run it when disk space is a concern  or put it in cron (gets a list of 1-star or JPGs with RAWs, passes it to `git annex drop --batch`).
+
+Otherwise, creating a special remotes that will return `CHECKPRESENT-SUCCESS` for keys you want to drop, so you can set the preferred content to only want files that are \"not present\" in that special remote might work?
+"""]]

Added a comment
diff --git a/doc/forum/Photos__44___raw_and_jpeg__58___drop_jpeg_if_raw_is_available/comment_6_a34d404dbecd6730c1cc28af9c0eac26._comment b/doc/forum/Photos__44___raw_and_jpeg__58___drop_jpeg_if_raw_is_available/comment_6_a34d404dbecd6730c1cc28af9c0eac26._comment
new file mode 100644
index 000000000..7a9e698bf
--- /dev/null
+++ b/doc/forum/Photos__44___raw_and_jpeg__58___drop_jpeg_if_raw_is_available/comment_6_a34d404dbecd6730c1cc28af9c0eac26._comment
@@ -0,0 +1,16 @@
+[[!comment format=mdwn
+ username="Chris"
+ avatar="http://cdn.libravatar.org/avatar/02b67b7ebace8cb6433504ba9a17d4a4"
+ subject="comment 6"
+ date="2018-10-16T11:07:30Z"
+ content="""
+That means I update the metadata periodically by a script such as
+
+    for k in `find . -name \"*.CR2\"`; do
+        if [ -e `dirname $k`/`basename $k .CR2`.JPG ]; then
+            <set metadata>
+        fi
+    done
+
+and add a corresponding preferred content setting? I'll try that. Btw, is there a possibility to use the xmp files of my raw converter (darktable) as source for metadata? I want to do the same with images that have a low star rating (<1 star should not be synchronized to the notebook computer and dropped from there as soon as they are on the external disk), and I hope there is a possibility to not double this metadata but directly use the xmp output. The xmp files are checked into the git regularly (without git annex).
+"""]]

Added a comment: --all ?
diff --git a/doc/git-annex-find/comment_1_cc246e2341138dddf692d28a2918bd38._comment b/doc/git-annex-find/comment_1_cc246e2341138dddf692d28a2918bd38._comment
new file mode 100644
index 000000000..d3864c453
--- /dev/null
+++ b/doc/git-annex-find/comment_1_cc246e2341138dddf692d28a2918bd38._comment
@@ -0,0 +1,9 @@
+[[!comment format=mdwn
+ username="disteph@02005197c6b0e3d92255823d62c08dbe6d7a4d52"
+ nickname="disteph"
+ avatar="http://cdn.libravatar.org/avatar/a12e6e0852d5a1985b8684b17202561c"
+ subject="--all ?"
+ date="2018-10-15T23:57:27Z"
+ content="""
+It would be awesome if there was the same --all option, and if the command produced something in bare repos, just like with the move / copy commands. At the moment for instance, it seems running git annex find on a bare repo returns nothing. There would be the question of the output format, but I guess one key per line is the obvious format one wants. I personally would want to run git annex find before a git annex move/copy, as a kind of dry-run, i.e. just to see the list of keys that will be transferred.
+"""]]

Added a comment
diff --git a/doc/forum/Photos__44___raw_and_jpeg__58___drop_jpeg_if_raw_is_available/comment_5_9eb36b5b43b77de790f99ae1d764e4ea._comment b/doc/forum/Photos__44___raw_and_jpeg__58___drop_jpeg_if_raw_is_available/comment_5_9eb36b5b43b77de790f99ae1d764e4ea._comment
new file mode 100644
index 000000000..0f168d130
--- /dev/null
+++ b/doc/forum/Photos__44___raw_and_jpeg__58___drop_jpeg_if_raw_is_available/comment_5_9eb36b5b43b77de790f99ae1d764e4ea._comment
@@ -0,0 +1,10 @@
+[[!comment format=mdwn
+ username="CandyAngel"
+ avatar="http://cdn.libravatar.org/avatar/15c0aade8bec5bf004f939dd73cf9ed8"
+ subject="comment 5"
+ date="2018-10-15T22:23:06Z"
+ content="""
+You could set the preferred content to not include files with that metadata, so they would be dropped by `git annex drop --auto` and not brought back by `git annex sync`.
+
+git-annex still has to handle all those files and information related to them, manually or not, so it'll be just as slow. Not that 100K files is a lot to me anymore :P (my largest annex is in the 10s of millions..).
+"""]]

Added a comment
diff --git a/doc/forum/Photos__44___raw_and_jpeg__58___drop_jpeg_if_raw_is_available/comment_4_0dc16ef1d592be0dfeb63c28014a70b2._comment b/doc/forum/Photos__44___raw_and_jpeg__58___drop_jpeg_if_raw_is_available/comment_4_0dc16ef1d592be0dfeb63c28014a70b2._comment
new file mode 100644
index 000000000..83b912118
--- /dev/null
+++ b/doc/forum/Photos__44___raw_and_jpeg__58___drop_jpeg_if_raw_is_available/comment_4_0dc16ef1d592be0dfeb63c28014a70b2._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="Chris"
+ avatar="http://cdn.libravatar.org/avatar/02b67b7ebace8cb6433504ba9a17d4a4"
+ subject="comment 4"
+ date="2018-10-15T21:43:03Z"
+ content="""
+I was hoping that there is a possibility that git-annex recognizes the files I do not want on my notebook based on the rule I described and drops them as soon as their copy arrived at the USB disk automatically (e.g. with the next sync command), and never pulls them back unless explicitly stated (especially, `sync --content` should not transfer them back). What you are describing is basically a manual tagging and dropping of the images. Of course I could write a script to drop the jpegs, but this would be very slow for 100000 images, and I was hoping for some more automated way from within git-annex.
+"""]]

removed
diff --git a/doc/forum/Photos__44___raw_and_jpeg__58___drop_jpeg_if_raw_is_available/comment_3_0b336ff312f7cf6bdd58cdd2b7045f4f._comment b/doc/forum/Photos__44___raw_and_jpeg__58___drop_jpeg_if_raw_is_available/comment_3_0b336ff312f7cf6bdd58cdd2b7045f4f._comment
deleted file mode 100644
index 50a1dc7f2..000000000
--- a/doc/forum/Photos__44___raw_and_jpeg__58___drop_jpeg_if_raw_is_available/comment_3_0b336ff312f7cf6bdd58cdd2b7045f4f._comment
+++ /dev/null
@@ -1,17 +0,0 @@
-[[!comment format=mdwn
- username="CandyAngel"
- avatar="http://cdn.libravatar.org/avatar/15c0aade8bec5bf004f939dd73cf9ed8"
- subject="comment 3"
- date="2018-10-15T12:59:24Z"
- content="""
-Hm.. if you want to just drop the JPGs which have known RAW versions, you can set some metadata to say it has a RAW version (again, I'd just set it to the key of the RAW as it makes it easier to get/find later) and then drop JPGs which have that field set.
-
-   git annex metadata -s derived_from_raw=SHA256E-s[...].RAW DCIM_0001.JPG
-   git annex drop --metadata 'derived_from_raw=*' --include '*.JPG'
-
-Need to check the `--metadata` matching filter works as intended there..
-
-Given your criteria is only \"file in the current directory with the same name, but different extension\", you could script the population of that metadata field.
-
-This will drop the JPGs where you've indicated it has a RAW even if that RAW isn't present though. I'm not entirely sure what behavior you want..
-"""]]

Added a comment
diff --git a/doc/forum/Photos__44___raw_and_jpeg__58___drop_jpeg_if_raw_is_available/comment_4_0bc307a3fbe000059b23cf681d125ce6._comment b/doc/forum/Photos__44___raw_and_jpeg__58___drop_jpeg_if_raw_is_available/comment_4_0bc307a3fbe000059b23cf681d125ce6._comment
new file mode 100644
index 000000000..1df21259f
--- /dev/null
+++ b/doc/forum/Photos__44___raw_and_jpeg__58___drop_jpeg_if_raw_is_available/comment_4_0bc307a3fbe000059b23cf681d125ce6._comment
@@ -0,0 +1,17 @@
+[[!comment format=mdwn
+ username="CandyAngel"
+ avatar="http://cdn.libravatar.org/avatar/15c0aade8bec5bf004f939dd73cf9ed8"
+ subject="comment 4"
+ date="2018-10-15T12:59:49Z"
+ content="""
+Hm.. if you want to just drop the JPGs which have known RAW versions, you can set some metadata to say it has a RAW version (again, I'd just set it to the key of the RAW as it makes it easier to get/find later) and then drop JPGs which have that field set.
+
+    git annex metadata -s derived_from_raw=SHA256E-s[...].RAW DCIM_0001.JPG
+    git annex drop --metadata 'derived_from_raw=*' --include '*.JPG'
+
+Need to check the `--metadata` matching filter works as intended there..
+
+Given your criteria is only \"file in the current directory with the same name, but different extension\", you could script the population of that metadata field.
+
+This will drop the JPGs where you've indicated it has a RAW even if that RAW isn't present though. I'm not entirely sure what behavior you want..
+"""]]

Added a comment
diff --git a/doc/forum/Photos__44___raw_and_jpeg__58___drop_jpeg_if_raw_is_available/comment_3_0b336ff312f7cf6bdd58cdd2b7045f4f._comment b/doc/forum/Photos__44___raw_and_jpeg__58___drop_jpeg_if_raw_is_available/comment_3_0b336ff312f7cf6bdd58cdd2b7045f4f._comment
new file mode 100644
index 000000000..50a1dc7f2
--- /dev/null
+++ b/doc/forum/Photos__44___raw_and_jpeg__58___drop_jpeg_if_raw_is_available/comment_3_0b336ff312f7cf6bdd58cdd2b7045f4f._comment
@@ -0,0 +1,17 @@
+[[!comment format=mdwn
+ username="CandyAngel"
+ avatar="http://cdn.libravatar.org/avatar/15c0aade8bec5bf004f939dd73cf9ed8"
+ subject="comment 3"
+ date="2018-10-15T12:59:24Z"
+ content="""
+Hm.. if you want to just drop the JPGs which have known RAW versions, you can set some metadata to say it has a RAW version (again, I'd just set it to the key of the RAW as it makes it easier to get/find later) and then drop JPGs which have that field set.
+
+   git annex metadata -s derived_from_raw=SHA256E-s[...].RAW DCIM_0001.JPG
+   git annex drop --metadata 'derived_from_raw=*' --include '*.JPG'
+
+Need to check the `--metadata` matching filter works as intended there..
+
+Given your criteria is only \"file in the current directory with the same name, but different extension\", you could script the population of that metadata field.
+
+This will drop the JPGs where you've indicated it has a RAW even if that RAW isn't present though. I'm not entirely sure what behavior you want..
+"""]]

Added a comment
diff --git a/doc/forum/Photos__44___raw_and_jpeg__58___drop_jpeg_if_raw_is_available/comment_2_0186f593ec084e12216ad2f7da49474e._comment b/doc/forum/Photos__44___raw_and_jpeg__58___drop_jpeg_if_raw_is_available/comment_2_0186f593ec084e12216ad2f7da49474e._comment
new file mode 100644
index 000000000..ca2072a85
--- /dev/null
+++ b/doc/forum/Photos__44___raw_and_jpeg__58___drop_jpeg_if_raw_is_available/comment_2_0186f593ec084e12216ad2f7da49474e._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="Chris"
+ avatar="http://cdn.libravatar.org/avatar/02b67b7ebace8cb6433504ba9a17d4a4"
+ subject="comment 2"
+ date="2018-10-15T09:07:44Z"
+ content="""
+Thanks for the idea. The reason I want to get rid of the jpegs is not that I see them as derivatives of the raw (for my most recent camera they are since it can reprocess the raws), but that I consider them less important. On my notebook computer I do not have enough space to keep all the files anymore. Therefore I want to get rid of the less important ones, which means that later I want to also remove the raws with less than 2 stars rating, and the movie clips I do not work on currently. On the external hard disk, all the files are present anytime. The backup is separate, the git-annex setup is just for extending my notebooks hard disk drive since industry fails for years to come up with 2.5\" drives larger than 2 TB in 9.5 mm height. So I think what you are describing is another use case. Automatically recognizing raw+jpeg pairs would just be partial automation of my workflow. Or did I miss something?
+"""]]

Added a comment
diff --git a/doc/forum/Photos__44___raw_and_jpeg__58___drop_jpeg_if_raw_is_available/comment_1_3f365138be319ac2c81bdefb3f59b0d8._comment b/doc/forum/Photos__44___raw_and_jpeg__58___drop_jpeg_if_raw_is_available/comment_1_3f365138be319ac2c81bdefb3f59b0d8._comment
new file mode 100644
index 000000000..fbf1447e0
--- /dev/null
+++ b/doc/forum/Photos__44___raw_and_jpeg__58___drop_jpeg_if_raw_is_available/comment_1_3f365138be319ac2c81bdefb3f59b0d8._comment
@@ -0,0 +1,12 @@
+[[!comment format=mdwn
+ username="CandyAngel"
+ avatar="http://cdn.libravatar.org/avatar/15c0aade8bec5bf004f939dd73cf9ed8"
+ subject="comment 1"
+ date="2018-10-15T07:33:40Z"
+ content="""
+This sounds like it could be built around my own suggestion of [[todo/Bidirectional_metadata]].
+
+There, Joey mentions that the datalad project uses a special remote. Perhaps one could be made where it does the JPG/NEF mapping and reports the JPG as available if the NEF is, allowing the NEF to count as a copy.
+
+I wouldn't personally do this unless the JPG can be reliably reproduced from the NEF *exactly* though!
+"""]]

Initial question.
diff --git a/doc/forum/Photos__44___raw_and_jpeg__58___drop_jpeg_if_raw_is_available.mdwn b/doc/forum/Photos__44___raw_and_jpeg__58___drop_jpeg_if_raw_is_available.mdwn
new file mode 100644
index 000000000..f36602af7
--- /dev/null
+++ b/doc/forum/Photos__44___raw_and_jpeg__58___drop_jpeg_if_raw_is_available.mdwn
@@ -0,0 +1 @@
+I try to use git-annex to manage my photographs. With most cameras, I do shoot raw+jpeg, but sometimes or from some sources there are only jpegs. Is there a possibility to automatically detect the raw+jpeg pairs (same basename, in the same directory, matching raw+jpeg extensions, would be the rule) and drop these jpegs from my notebooks repository, but keep the jpegs that do not have a complementing raw?

idea
diff --git a/doc/todo/hide_missing_files/comment_2_bdae4301aa8ddc6621d4eb2612627069._comment b/doc/todo/hide_missing_files/comment_2_bdae4301aa8ddc6621d4eb2612627069._comment
new file mode 100644
index 000000000..a26c65ffe
--- /dev/null
+++ b/doc/todo/hide_missing_files/comment_2_bdae4301aa8ddc6621d4eb2612627069._comment
@@ -0,0 +1,37 @@
+[[!comment format=mdwn
+ username="joey"
+ subject="""comment 2"""
+ date="2018-10-14T05:08:18Z"
+ content="""
+The blocker to implementing this in views (or adjusted branch) has been
+how to efficiently update the tree after a get/drop. Doing it after every
+file is certianly too slow and also would create lots of unused tree
+objects in git that would linger until gced.
+
+And less of a blocker, but still kind of a problem is, how to run `git
+annex get` on a file if its symlink is hidden due to it not being available?
+
+Occurred to me tonight that this could be done in `git annex sync --content`,
+at the end. That way the tree update would only be done once, after however
+many gets/drops. And sync could look at the original branch when finding
+content to transfer, so would avoid the other problem too.
+
+One of my use cases for wanting this is to use it on my phone, to load up
+podcasts I want to listen to on a trip. One way I could do this is
+to use metadata to tag those podcasts with a tag that is preferred content
+for the phone. Then `sync --content` run on the phone
+would download them, and update the visible tree.
+
+The assistant could also update the visible tree at the end of a sync run.
+
+Could `sync --content` cause an update of a remotes visible tree too?
+It would need an addtion to the P2P protocol, but seems worth
+doing for symmetry.
+
+(For users who don't want to use sync but want to git-annex get/drop
+manually, they could check out the real branch temporarily, run whatever
+there, and then run a command to get back into the view where
+missing files are hidden. Of course this could be slow when the repo has a
+lot of files. Especially in v6 mode where checkout runs git-annex once per
+file.)
+"""]]

Added a comment
diff --git a/doc/walkthrough/adding_a_remote/comment_7_caea7e4e9ec904617c6ec1a33368090f._comment b/doc/walkthrough/adding_a_remote/comment_7_caea7e4e9ec904617c6ec1a33368090f._comment
new file mode 100644
index 000000000..5226919b2
--- /dev/null
+++ b/doc/walkthrough/adding_a_remote/comment_7_caea7e4e9ec904617c6ec1a33368090f._comment
@@ -0,0 +1,16 @@
+[[!comment format=mdwn
+ username="slackermesut@265fdbc657a03028da3a213cbb9f74a9d621c8ab"
+ avatar="http://cdn.libravatar.org/avatar/7c78d1b3bc3ae0e6c00d49c92b573162"
+ subject="comment 7"
+ date="2018-10-13T20:47:44Z"
+ content="""
+Hi, 
+
+I have a laptop and desktop pc.
+I initialized git-annex repo on laptop and mounted laptop to desktop.
+I added mounted laptop directory to desktop as a remote.
+After I synced files with content with laptop on desktop.
+I want to get files and commits on laptop but I can't.
+
+On laptop there is a .git directory but I don't know how to get files from it.
+"""]]

update
diff --git a/doc/thanks.mdwn b/doc/thanks.mdwn
index 8efa692b2..653582f90 100644
--- a/doc/thanks.mdwn
+++ b/doc/thanks.mdwn
@@ -17,7 +17,7 @@ email <id@joeyh.name>.)
 
 git-annex development is partially supported by the
 [NSF](https://www.nsf.gov/awardsearch/showAward?AWD_ID=1429999) as a part of the
-[DataLad project](http://datalad.org/).
+[DataLad project](http://datalad.org/) and NICEMAN (ReproNim TR&D3).
 
 Thanks also to these folks for their support: 
 [[!inline raw=yes pages="thanks/list"]] and anonymous supporters.

devbog
diff --git a/doc/devblog/day_546__deleted_40_thousand_lines_of_code.mdwn b/doc/devblog/day_546__deleted_40_thousand_lines_of_code.mdwn
new file mode 100644
index 000000000..ee51cd19a
--- /dev/null
+++ b/doc/devblog/day_546__deleted_40_thousand_lines_of_code.mdwn
@@ -0,0 +1,14 @@
+Pulled the trigger on the old Android builds, and made a 
+[massive commit](http://source.git-annex.branchable.com/?p=source.git;a=commitdiff;h=38d691a10febf9590dd3639defa0e4f38ec3648c)
+removing all the cruft that had built up to enable them. Running in Termux
+is just better. It's important to note this does not mean I've given up on
+more native git-annex Android stuff, indeed there are promising
+developments in ghc Android support that I'm keeping an eye on.
+
+I'll kind of miss the EvilSplicer, that was 750 lines of crazy code to be
+proud of. But really, it's going to be great to not have hanging over me
+the prospect that any change could break the Android build and end up
+needing tons of work to resolve.
+
+Today's work was sponsored by Trenton Cronholm 
+[on Patreon](https://patreon.com/joeyh).

move more
diff --git a/doc/Android/comment_19_dc7b428f525a082834cb87221fc627ff._comment b/doc/Android/oldcomments/comment_19_dc7b428f525a082834cb87221fc627ff._comment
similarity index 100%
rename from doc/Android/comment_19_dc7b428f525a082834cb87221fc627ff._comment
rename to doc/Android/oldcomments/comment_19_dc7b428f525a082834cb87221fc627ff._comment
diff --git a/doc/Android/comment_20_81940ea56ace3dcd5fa84dfccd88ad96._comment b/doc/Android/oldcomments/comment_20_81940ea56ace3dcd5fa84dfccd88ad96._comment
similarity index 100%
rename from doc/Android/comment_20_81940ea56ace3dcd5fa84dfccd88ad96._comment
rename to doc/Android/oldcomments/comment_20_81940ea56ace3dcd5fa84dfccd88ad96._comment

move old comments
diff --git a/doc/Android/comment_5_ba11b81c671d9bcd6f496fbd6f562b0f._comment b/doc/Android/oldcomments/comment_5_ba11b81c671d9bcd6f496fbd6f562b0f._comment
similarity index 100%
rename from doc/Android/comment_5_ba11b81c671d9bcd6f496fbd6f562b0f._comment
rename to doc/Android/oldcomments/comment_5_ba11b81c671d9bcd6f496fbd6f562b0f._comment
diff --git a/doc/Android/comment_6_455bcbd36c7b5eeb905cc56da4666b07._comment b/doc/Android/oldcomments/comment_6_455bcbd36c7b5eeb905cc56da4666b07._comment
similarity index 100%
rename from doc/Android/comment_6_455bcbd36c7b5eeb905cc56da4666b07._comment
rename to doc/Android/oldcomments/comment_6_455bcbd36c7b5eeb905cc56da4666b07._comment
diff --git a/doc/Android/comment_6_97704e0d89bb87155e019e09e54fc9bf._comment b/doc/Android/oldcomments/comment_6_97704e0d89bb87155e019e09e54fc9bf._comment
similarity index 100%
rename from doc/Android/comment_6_97704e0d89bb87155e019e09e54fc9bf._comment
rename to doc/Android/oldcomments/comment_6_97704e0d89bb87155e019e09e54fc9bf._comment
diff --git a/doc/Android/comment_7_725ec376b56f51afa37dfd750c744f73._comment b/doc/Android/oldcomments/comment_7_725ec376b56f51afa37dfd750c744f73._comment
similarity index 100%
rename from doc/Android/comment_7_725ec376b56f51afa37dfd750c744f73._comment
rename to doc/Android/oldcomments/comment_7_725ec376b56f51afa37dfd750c744f73._comment
diff --git a/doc/Android/comment_8_e97d2e4213324cef62d99edebab7ccb1._comment b/doc/Android/oldcomments/comment_8_e97d2e4213324cef62d99edebab7ccb1._comment
similarity index 100%
rename from doc/Android/comment_8_e97d2e4213324cef62d99edebab7ccb1._comment
rename to doc/Android/oldcomments/comment_8_e97d2e4213324cef62d99edebab7ccb1._comment
diff --git a/doc/Android/comment_9_d0d9c19d0c827b992c531e00201b1acf._comment b/doc/Android/oldcomments/comment_9_d0d9c19d0c827b992c531e00201b1acf._comment
similarity index 100%
rename from doc/Android/comment_9_d0d9c19d0c827b992c531e00201b1acf._comment
rename to doc/Android/oldcomments/comment_9_d0d9c19d0c827b992c531e00201b1acf._comment

fix header
diff --git a/doc/Android.mdwn b/doc/Android.mdwn
index c0a588d77..1bbe8d68a 100644
--- a/doc/Android.mdwn
+++ b/doc/Android.mdwn
@@ -52,7 +52,7 @@ your files to and from it.
 And so on. Most ways you would use git-annex on a Linux system work fairly
 well in the Termux environment.
 
-# Known limitations
+## Known limitations
 
 * Direct mode
 

link to Termux:Boot info
diff --git a/doc/Android.mdwn b/doc/Android.mdwn
index df5041f3c..c0a588d77 100644
--- a/doc/Android.mdwn
+++ b/doc/Android.mdwn
@@ -31,11 +31,11 @@ remain running and sync your files.
 
 ## Starting at power on
 
-If you install the Termux:Boot app, git-annex will automatically
-be automatically started when your Android device powers on. It will
-run in the background in whatever repositories you have set up in the
-webapp. (Or have listed in (or listed in
-~/.config/git-annex/autostart)
+If you install the [Termux:Boot app](https://wiki.termux.com/wiki/Termux:Boot),
+git-annex will automatically be automatically started when your Android device
+powers on. It will run in the background in whatever repositories you have
+set up in the webapp.  
+(Or have listed in (or listed in ~/.config/git-annex/autostart)
 
 ## Using the command line
 

improve link
diff --git a/doc/install/Android.mdwn b/doc/install/Android.mdwn
index dcef7ee32..af9f70fc9 100644
--- a/doc/install/Android.mdwn
+++ b/doc/install/Android.mdwn
@@ -1,6 +1,6 @@
 Now git-annex can be used on Android!
 
-See [[/Android]] for installation instructions and other details.
+[[Installation instructions here|/Android]].
 
 The way it works now is the [[Linux_standalone]] builds of git-annex are run
 inside the Termux app. The old git-annex Android app,

remove old android app autobuild
diff --git a/Build/DistributionUpdate.hs b/Build/DistributionUpdate.hs
index 6d3113c66..4d8ffe499 100644
--- a/Build/DistributionUpdate.hs
+++ b/Build/DistributionUpdate.hs
@@ -35,7 +35,6 @@ signingKey = "89C809CB"
 autobuilds :: [(URLString, FilePath)]
 autobuilds = 
 	(map linuxarch ["i386", "amd64", "armel", "arm64", "i386-ancient"]) ++
-	(map androidversion ["4.0", "4.3", "5.0"]) ++
 	[ (autobuild "x86_64-apple-yosemite/git-annex.dmg", "git-annex/OSX/current/10.10_Yosemite/git-annex.dmg")
 	, (autobuild "windows/git-annex-installer.exe", "git-annex/windows/current/git-annex-installer.exe")
 	]
@@ -44,10 +43,6 @@ autobuilds =
 		( autobuild (a ++ "/git-annex-standalone-" ++ a ++ ".tar.gz")
 		, "git-annex/linux/current/git-annex-standalone-" ++ a ++ ".tar.gz"
 		)
-	androidversion v =
-		( autobuild ("android/" ++ v ++ "/git-annex.apk")
-		, "git-annex/android/current/" ++ v ++ "/git-annex.apk"
-		)
 	autobuild f = "https://downloads.kitenet.net/git-annex/autobuild/" ++ f
 
 main :: IO ()
diff --git a/doc/builds.mdwn b/doc/builds.mdwn
index 6ff3db9ec..30a06cfce 100644
--- a/doc/builds.mdwn
+++ b/doc/builds.mdwn
@@ -18,9 +18,6 @@
 <h2>Linux i386-ancient</h2>
 <iframe width=1024 height=20em scrolling=no frameborder=0 marginheight=0 marginwidth=0 src="https://downloads.kitenet.net/git-annex/autobuild/i386-ancient/build-version">
 </iframe>
-<h2>Android</h2>
-<iframe width=1024 height=20em scrolling=no frameborder=0 marginheight=0 marginwidth=0 src="https://downloads.kitenet.net/git-annex/autobuild/android/4.3/build-version">
-</iframe>
 <h2>OSX Yosemite</h2>
 <iframe width=1024 height=20em scrolling=no frameborder=0 marginheight=0 marginwidth=0 src="https://downloads.kitenet.net/git-annex/autobuild/x86_64-apple-yosemite/build-version">
 </iframe>
@@ -46,9 +43,6 @@
 <h2>Linux i386-ancient</h2>
 <iframe width=1024 scrolling=no frameborder=0 marginheight=0 marginwidth=0 src="https://downloads.kitenet.net/git-annex/autobuild/i386-ancient/">
 </iframe>
-<h2>Android</h2>
-<iframe width=1024 scrolling=no frameborder=0 marginheight=0 marginwidth=0 src="https://downloads.kitenet.net/git-annex/autobuild/android/">
-</iframe>
 <h2>OSX Yosemite</h2>
 <iframe width=1024 scrolling=no frameborder=0 marginheight=0 marginwidth=0 src="https://downloads.kitenet.net/git-annex/autobuild/x86_64-apple-yosemite/">
 </iframe>

update android docs for termux
This commit was sponsored by John Pellman on Patreon.
diff --git a/doc/Android.mdwn b/doc/Android.mdwn
index d7c00d869..df5041f3c 100644
--- a/doc/Android.mdwn
+++ b/doc/Android.mdwn
@@ -1,53 +1,66 @@
-git-annex is now available for Android. This includes the 
+git-annex is available for Android inside Termux. This includes the 
 [[git-annex assistant|/assistant]], for easy syncing between your Android
 and other devices. You do not need to root your Android to use git-annex.
 
-[[Android installation instructions|/install/android]]
+[[!toc ]]
 
-When you run the git-annex Android app, two windows will open. The first is
-a terminal window, and the second is a web browser showing the git-annex
-webapp.
+## Installation
 
-[[!img apps.png alt="two windows"]]
+First, install [Termux](https://termux.com/). This is an Android app that can
+run some Linux software in a terminal, including git-annex.
 
-[[!toc ]]
+git-annex is not currently part of the Termux distribution, but it's easy
+to install it. Paste these commands into Termux:
+
+	pkg install wget
+	wget https://git-annex.branchable.com/install/Android/git-annex-install.sh
+	sh git-annex-install.sh
+
+## Starting git-annex
+
+To start git-annex, just run "git annex webapp" inside Termux.
+A browser window will open with the git-annex interface.
+
+[[!img webapp.png alt="git-annex webapp"]]
 
-## closing and reopening the webapp
+## Closing and reopening the webapp
 
 The webapp does not need to be left open after you've set up your
-repository. As long as the terminal window is left open, git-annex will
-remain running and sync your files. To re-open the webapp after closing it,
-use the [[!img newwindow.png alt="New Window"]] icon in the terminal window.
+repository. As long as Termux is left open, git-annex will
+remain running and sync your files.
 
-## starting git-annex
+## Starting at power on
 
-The app is not currently automatically started on boot, so you will need to
-manually open it to keep your files in sync. You do not need to leave the
-app running all the time, though. It will sync back up automatically when
-started.
+If you install the Termux:Boot app, git-annex will automatically
+be automatically started when your Android device powers on. It will
+run in the background in whatever repositories you have set up in the
+webapp. (Or have listed in (or listed in
+~/.config/git-annex/autostart)
 
-## stopping git-annex
+## Using the command line
 
-Simply close the terminal window to stop git-annex from running.
+If you prefer to use `git-annex` at the command line, you can do so inside
+Termux. Here we'll make a repository for photos:
 
-## using the command line
+        cd ~/storage/dcim
+        git init
+        git annex init
 
-[[!img terminal.png alt="Android terminal"]]
+You can go on to set up a ssh remote pointing to a server, and sync
+your files to and from it.
 
-If you prefer to use `git-annex` at the command line, you can do so using the
-terminal. A fairly full set of tools is provided, including `git`, `ssh`,
-`rsync`, and `gpg`.
+And so on. Most ways you would use git-annex on a Linux system work fairly
+well in the Termux environment.
 
-To prevent the webapp from being automatically started
-when a terminal window opens, go into the terminal preferences, to "Initial
-Command", and clear out the default `git annex webapp` setting.
+# Known limitations
 
-Or, if you'd like to run the assistant automatically, but not open the
-webapp, change the "Initial Command" to: `git annex assistant --autostart`
+* Direct mode
 
-## using from adb shell
+  git-annex will probably default to direct mode due to the
+  limitations of Android's /sdcard. You can get around this using v6
+  unlocked repositories, or by putting the git-annex repository on a better
+  filesystem on the Android device, such as your termux home directory.
 
-To set up the git-annex environment from within `adb shell`, run:
-`/data/data/ga.androidterm/runshell`
+## Upgrading
 
-This will launch a shell that has git-annex, git, etc in PATH.
+To upgrade to a new git-annex release, just run `git-annex-install.sh` again.
diff --git a/doc/android/apps.png b/doc/android/apps.png
deleted file mode 100644
index 310757f1e..000000000
Binary files a/doc/android/apps.png and /dev/null differ
diff --git a/doc/android/install.png b/doc/android/install.png
deleted file mode 100644
index 882455df1..000000000
Binary files a/doc/android/install.png and /dev/null differ
diff --git a/doc/android/newwindow.png b/doc/android/newwindow.png
deleted file mode 100644
index 4cca6ae09..000000000
Binary files a/doc/android/newwindow.png and /dev/null differ
diff --git a/doc/android/terminal.png b/doc/android/terminal.png
deleted file mode 100644
index 9afa2720f..000000000
Binary files a/doc/android/terminal.png and /dev/null differ
diff --git a/doc/install/Android.mdwn b/doc/install/Android.mdwn
index 2211eec44..dcef7ee32 100644
--- a/doc/install/Android.mdwn
+++ b/doc/install/Android.mdwn
@@ -1,45 +1,7 @@
 Now git-annex can be used on Android!
 
-[[Documentation for using git-annex on Android|/android]]
+See [[/Android]] for installation instructions and other details.
 
-## Termux
-
-This just in: git-annex can be used in Termux, instead of using the Android
-app below. [[Give git-annex in Termux a try|tips/install_on_Android_in_Termux/]]
-
-## (Old) Android app
-
-This app is being deprecated in favor of Termux. It doesn't work with newer
-versions of Android.
-
-To install it, first, ensure your Android device is configured to allow
-installation of the app. Go to Setup -&gt; Security, and enable "Unknown
-Sources".
-
-Then download the git-annex.apk for your version of Android, and 
-open it to install.
-
-* [Android 5.0 git-annex.apk](http://downloads.kitenet.net/git-annex/android/current/5.0/git-annex.apk)
-* [Android 4.4 and 4.3 git-annex.apk](http://downloads.kitenet.net/git-annex/android/current/4.3/git-annex.apk)
-* [Android 4.0 to 4.2 git-annex.apk](http://downloads.kitenet.net/git-annex/android/current/4.0/git-annex.apk)
-
-## autobuilds
-
-A daily build is also available, thanks to Mesar Hameed and the University
-of Bath CS department.
-
-* [Android 5.0 git-annex.apk](http://downloads.kitenet.net/git-annex/autobuild/android/5.0/git-annex.apk)
-* [Android 4.4 and 4.3 git-annex.apk](http://downloads.kitenet.net/git-annex/autobuild/android/4.3/git-annex.apk)
-* [Android 4.0 to 4.2 git-annex.apk](http://downloads.kitenet.net/git-annex/autobuild/android/4.0/git-annex.apk)
-* [build logs](http://downloads.kitenet.net/git-annex/autobuild/android/)
-
-## building it yourself
-
-git-annex can be built from source for Android.
-
-1. Run `standalone/android/buildchroot` as root (requires debootstrap).
-   This builds a chroot with a `builder` user.
-   The rest of the build will run in this chroot as that user.
-2. In the chroot, run `standalone/android/install-haskell-packages`
-3. Finally, once the chroot is set up, you can build an Android binary
-   with `make android`, and `make androidapp` will build the complete APK.
+The way it works now is the [[Linux_standalone]] builds of git-annex are run
+inside the Termux app. The old git-annex Android app,
+is no longer being updated, details about it are at [[oldapp]].
diff --git a/doc/install/Android/oldapp.mdwn b/doc/install/Android/oldapp.mdwn
new file mode 100644
index 000000000..7013a600a
--- /dev/null
+++ b/doc/install/Android/oldapp.mdwn
@@ -0,0 +1,11 @@
+## Old Android app
+
+This app is being deprecated in favor of Termux. It doesn't work with newer
+versions of Android.
+
+**These builds are not being updated.** They are provided just in case
+someone needs them, but use at your own risk.
+
+* [Android 5.0 git-annex.apk](http://downloads.kitenet.net/git-annex/android/current/5.0/git-annex.apk)
+* [Android 4.4 and 4.3 git-annex.apk](http://downloads.kitenet.net/git-annex/android/current/4.3/git-annex.apk)
+* [Android 4.0 to 4.2 git-annex.apk](http://downloads.kitenet.net/git-annex/android/current/4.0/git-annex.apk)
diff --git a/doc/install/Android/comment_10_225f2c6fe255be93702cfbd4dc172f3b._comment b/doc/install/Android/oldapp/comment_10_225f2c6fe255be93702cfbd4dc172f3b._comment
similarity index 100%
rename from doc/install/Android/comment_10_225f2c6fe255be93702cfbd4dc172f3b._comment
rename to doc/install/Android/oldapp/comment_10_225f2c6fe255be93702cfbd4dc172f3b._comment
diff --git a/doc/install/Android/comment_10_4b565e73f02f0e84bdf7e686b0d7bf5f._comment b/doc/install/Android/oldapp/comment_10_4b565e73f02f0e84bdf7e686b0d7bf5f._comment
similarity index 100%
rename from doc/install/Android/comment_10_4b565e73f02f0e84bdf7e686b0d7bf5f._comment
rename to doc/install/Android/oldapp/comment_10_4b565e73f02f0e84bdf7e686b0d7bf5f._comment
diff --git a/doc/install/Android/comment_11_3e7980603749665fafbdeb1b7ab068a5._comment b/doc/install/Android/oldapp/comment_11_3e7980603749665fafbdeb1b7ab068a5._comment
similarity index 100%

(Diff truncated)
Added a comment
diff --git a/doc/install/fromsource/comment_72_fb9581f4949efe1e8c90851fce9d61bf._comment b/doc/install/fromsource/comment_72_fb9581f4949efe1e8c90851fce9d61bf._comment
new file mode 100644
index 000000000..9647ff467
--- /dev/null
+++ b/doc/install/fromsource/comment_72_fb9581f4949efe1e8c90851fce9d61bf._comment
@@ -0,0 +1,10 @@
+[[!comment format=mdwn
+ username="Mowgli"
+ avatar="http://cdn.libravatar.org/avatar/17ab194dddf7b7da59ec039cbb3ac252"
+ subject="comment 72"
+ date="2018-10-13T12:37:56Z"
+ content="""
+@joey, What I have is just the builds I get from gentoo respective the haskell overlay. The most current version in that overlay is 6.20180626 but it also does not compile.
+
+I need a version more recent than 6.20170818 as that version does still use rsync for remote copy.
+"""]]

diff --git a/doc/forum/keys__44___URLs_and_URIs.mdwn b/doc/forum/keys__44___URLs_and_URIs.mdwn
new file mode 100644
index 000000000..c83deae6e
--- /dev/null
+++ b/doc/forum/keys__44___URLs_and_URIs.mdwn
@@ -0,0 +1 @@
+What, exactly, is the relationship between keys, URLs and URIs?  As I understand it, for each key, git-annex keeps a list of zero or more URLs/URIs from which the key's contents may be downloaded.  Is each entry in this list specific to one special remote, i.e. is this really a list of pairs (URL/URI, special-remote-uuid)? Is the record of which key is present in which remote completely independent of the record of which key may be downloaded from which remote through which URL/URI?  Is the only difference between URLs and URIs that, when a URL is added for a key, git-annex records the key as present in the web special remote, while when a URI is added, it doesn't?   (Sorry for too many questions.)

removed
diff --git a/doc/internals/comment_9_7fb2f20ff86ad546a8c491714d3bf39c._comment b/doc/internals/comment_9_7fb2f20ff86ad546a8c491714d3bf39c._comment
deleted file mode 100644
index 53900116f..000000000
--- a/doc/internals/comment_9_7fb2f20ff86ad546a8c491714d3bf39c._comment
+++ /dev/null
@@ -1,8 +0,0 @@
-[[!comment format=mdwn
- username="Ilya_Shlyakhter"
- avatar="http://cdn.libravatar.org/avatar/1647044369aa7747829c38b9dcc84df0"
- subject="comment 9"
- date="2018-10-12T20:17:19Z"
- content="""
-What are *.rmet files?
-"""]]

added a note about git-annex-examinekey and the URL backend
diff --git a/doc/git-annex-examinekey.mdwn b/doc/git-annex-examinekey.mdwn
index 83baa5667..739d2fd90 100644
--- a/doc/git-annex-examinekey.mdwn
+++ b/doc/git-annex-examinekey.mdwn
@@ -28,6 +28,10 @@ that can be determined purely by looking at the key.
 
   Also, '\\n' is a newline, '\\000' is a NULL, etc.
 
+  Note that it is not possible to extract the URL from a key created by the
+  URL backend: parts of longer URLs may be represented in the key by a 
+  checksum.
+
 * `--json`
 
   Enable JSON output. This is intended to be parsed by programs that use

added details about the URL backend
diff --git a/doc/backends.mdwn b/doc/backends.mdwn
index e7acd8ed9..d69701b95 100644
--- a/doc/backends.mdwn
+++ b/doc/backends.mdwn
@@ -46,7 +46,12 @@ content of an annexed file remains unchanged.
   files or slow systems.
 * `URL` -- This is a key that is generated from the url to a file.
   It's generated when using eg, `git annex addurl --fast`, when the file
-  content is not available for hashing.
+  content is not available for hashing.  The key may not contain the full
+  URL; for long URLs, part of the URL may be represented by a checksum.
+  The URL key may contain `&` characters; be sure to quote the key if
+  passing it to a shell script.  The URL-backend key is distinct from URLs/URIs
+  that may be attached to a key (from any backend) indicating the key's location
+  on the web or in one of [[special_remotes]].
 
 If you want to be able to prove that you're working with the same file
 contents that were checked into a repository earlier, you should avoid
@@ -75,3 +80,5 @@ in `.gitattributes`:
 	* annex.backend=WORM
 	*.mp3 annex.backend=SHA256E
 	*.ogg annex.backend=SHA256E
+
+See also: [[git-annex-examinekey]]

Added a comment
diff --git a/doc/internals/comment_9_7fb2f20ff86ad546a8c491714d3bf39c._comment b/doc/internals/comment_9_7fb2f20ff86ad546a8c491714d3bf39c._comment
new file mode 100644
index 000000000..53900116f
--- /dev/null
+++ b/doc/internals/comment_9_7fb2f20ff86ad546a8c491714d3bf39c._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="Ilya_Shlyakhter"
+ avatar="http://cdn.libravatar.org/avatar/1647044369aa7747829c38b9dcc84df0"
+ subject="comment 9"
+ date="2018-10-12T20:17:19Z"
+ content="""
+What are *.rmet files?
+"""]]

Added a comment
diff --git a/doc/bugs/Missing_backend_extension_in_files_with_long_extensions/comment_2_58c42e1f0dcb827f788ead011dd61981._comment b/doc/bugs/Missing_backend_extension_in_files_with_long_extensions/comment_2_58c42e1f0dcb827f788ead011dd61981._comment
new file mode 100644
index 000000000..6f5a41e1b
--- /dev/null
+++ b/doc/bugs/Missing_backend_extension_in_files_with_long_extensions/comment_2_58c42e1f0dcb827f788ead011dd61981._comment
@@ -0,0 +1,9 @@
+[[!comment format=mdwn
+ username="pz63@5ea0a27986d782e467e1ebef6eb31ba440cc58d5"
+ nickname="pz63"
+ avatar="http://cdn.libravatar.org/avatar/6268f09b18a71aafa3ad68ecd8a20d50"
+ subject="comment 2"
+ date="2018-10-12T15:49:00Z"
+ content="""
+Makes sense. Thank you very much!
+"""]]

Added a comment
diff --git a/doc/todo/shorter_keys_through_better_encoding/comment_6_de3f0be0f6b560ca7bb66f7b5c8f0592._comment b/doc/todo/shorter_keys_through_better_encoding/comment_6_de3f0be0f6b560ca7bb66f7b5c8f0592._comment
new file mode 100644
index 000000000..1f7dc490d
--- /dev/null
+++ b/doc/todo/shorter_keys_through_better_encoding/comment_6_de3f0be0f6b560ca7bb66f7b5c8f0592._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="Ilya_Shlyakhter"
+ avatar="http://cdn.libravatar.org/avatar/1647044369aa7747829c38b9dcc84df0"
+ subject="comment 6"
+ date="2018-10-12T13:58:05Z"
+ content="""
+Removing KEY/directory could give more savings, but sometimes there is more than one file there (eg key metadata), so the dir makes sense.  But the content filename in the dir needn’t repeat the key.   But, changing that could be hard.  Adding backend variamts with base64-encoded checksums seems possible though?
+"""]]

Added a comment
diff --git a/doc/todo/shorter_keys_through_better_encoding/comment_5_41857b7f25f8a922640378a41574b84d._comment b/doc/todo/shorter_keys_through_better_encoding/comment_5_41857b7f25f8a922640378a41574b84d._comment
new file mode 100644
index 000000000..97c0b7a8c
--- /dev/null
+++ b/doc/todo/shorter_keys_through_better_encoding/comment_5_41857b7f25f8a922640378a41574b84d._comment
@@ -0,0 +1,11 @@
+[[!comment format=mdwn
+ username="yarikoptic"
+ avatar="http://cdn.libravatar.org/avatar/f11e9c84cb18d26a1748c33b48c924b4"
+ subject="comment 5"
+ date="2018-10-12T13:42:07Z"
+ content="""
+I was arguing for removal of the KEY-directory/ for a while ;) See e.g. as old as https://github.com/datalad/datalad/issues/32 . There is an issue/discussion on this website too somewhere, couldn't find quickly.
+IMHO it is just a \"tech\" problem, i.e. no design principle forbids fixing it. It might though lead to performance issues since the containing directory then needs to be chmod'ed back and forth to introduce changes to the KEY-file under it, but it is probably very similar to what it is now anyways.  
+
+FWIW in DataLad we moved to use MD5E backend as the default to at least somewhat relief the burden of long symlinks.  I think we are \"secure\" enough for what we use DataLad here ;)
+"""]]

Added a comment
diff --git a/doc/todo/shorter_keys_through_better_encoding/comment_4_720012572e1d748bc628fdb17a55a3bd._comment b/doc/todo/shorter_keys_through_better_encoding/comment_4_720012572e1d748bc628fdb17a55a3bd._comment
new file mode 100644
index 000000000..ea89550a0
--- /dev/null
+++ b/doc/todo/shorter_keys_through_better_encoding/comment_4_720012572e1d748bc628fdb17a55a3bd._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="Ilya_Shlyakhter"
+ avatar="http://cdn.libravatar.org/avatar/1647044369aa7747829c38b9dcc84df0"
+ subject="comment 4"
+ date="2018-10-12T01:05:30Z"
+ content="""
+\"I'm not convinced that git-annex should try to make the symlinks shorter just because some programs have UIs that don't work well with longer symlinks\" -- UI is just one plus of shorter keys. Another is that some systems can't handle long paths; e.g. backends says don't use 512 or 384 hashes on Windows. Another is that long keys and symlinks increase the amount of data git deals with, which can matter for large repos. Using base64 encoding for hashes would shorten key lengths by a third; not repeating the hash twice in symlinks would give another factor of 2.
+"""]]

removed
diff --git a/doc/todo/shorter_keys_through_better_encoding/comment_4_26b9715e49ad0d90dd38d2d718926bfa._comment b/doc/todo/shorter_keys_through_better_encoding/comment_4_26b9715e49ad0d90dd38d2d718926bfa._comment
deleted file mode 100644
index 4b960d3e4..000000000
--- a/doc/todo/shorter_keys_through_better_encoding/comment_4_26b9715e49ad0d90dd38d2d718926bfa._comment
+++ /dev/null
@@ -1,8 +0,0 @@
-[[!comment format=mdwn
- username="Ilya_Shlyakhter"
- avatar="http://cdn.libravatar.org/avatar/1647044369aa7747829c38b9dcc84df0"
- subject="comment 4"
- date="2018-10-12T00:30:05Z"
- content="""
-\"I'm not convinced that git-annex should try to make the symlinks shorter just because some programs have UIs that don't work well with longer symlinks\" -- UI is just one plus of shorter keys.  Another is that some systems can't handle long paths; e.g. [[backends]] says don't use *512 or *384 hashes on Windows.  Another is that long keys and symlinks increase the amount of data git deals with, which can matter for large repos.   Using base64 encoding for hashes would halve the key lengths; not repeating the hash twice in symlinks would give another factor of 2.
-"""]]

Added a comment
diff --git a/doc/todo/shorter_keys_through_better_encoding/comment_4_26b9715e49ad0d90dd38d2d718926bfa._comment b/doc/todo/shorter_keys_through_better_encoding/comment_4_26b9715e49ad0d90dd38d2d718926bfa._comment
new file mode 100644
index 000000000..4b960d3e4
--- /dev/null
+++ b/doc/todo/shorter_keys_through_better_encoding/comment_4_26b9715e49ad0d90dd38d2d718926bfa._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="Ilya_Shlyakhter"
+ avatar="http://cdn.libravatar.org/avatar/1647044369aa7747829c38b9dcc84df0"
+ subject="comment 4"
+ date="2018-10-12T00:30:05Z"
+ content="""
+\"I'm not convinced that git-annex should try to make the symlinks shorter just because some programs have UIs that don't work well with longer symlinks\" -- UI is just one plus of shorter keys.  Another is that some systems can't handle long paths; e.g. [[backends]] says don't use *512 or *384 hashes on Windows.  Another is that long keys and symlinks increase the amount of data git deals with, which can matter for large repos.   Using base64 encoding for hashes would halve the key lengths; not repeating the hash twice in symlinks would give another factor of 2.
+"""]]

Added a comment
diff --git a/doc/news/version_6.20181011/comment_4_957247cc827cc4d2597c01f1f5627d0b._comment b/doc/news/version_6.20181011/comment_4_957247cc827cc4d2597c01f1f5627d0b._comment
new file mode 100644
index 000000000..d55b8d864
--- /dev/null
+++ b/doc/news/version_6.20181011/comment_4_957247cc827cc4d2597c01f1f5627d0b._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="Ilya_Shlyakhter"
+ avatar="http://cdn.libravatar.org/avatar/1647044369aa7747829c38b9dcc84df0"
+ subject="comment 4"
+ date="2018-10-12T00:06:16Z"
+ content="""
+a test failure: https://circleci.com/gh/conda-forge/git-annex-feedstock/116?utm_campaign=vcs-integration-link&utm_medium=referral&utm_source=github-build-link
+"""]]

initial report on the problem of parallel get from exporter remote
diff --git a/doc/bugs/initial_get_-J_on_exported_S3_bucket_fails.mdwn b/doc/bugs/initial_get_-J_on_exported_S3_bucket_fails.mdwn
new file mode 100644
index 000000000..2df65e2e7
--- /dev/null
+++ b/doc/bugs/initial_get_-J_on_exported_S3_bucket_fails.mdwn
@@ -0,0 +1,49 @@
+I was excited to give a shot to https://github.com/OpenNeuroDatasets/ds001544/ which has proper publicurl set etc... unfortunately there is something forbidding immediate parallel get (in below example `-J8` but it is the same with `-J2`).  It works on the 2nd try, or if not using -J. Error message states "unknown export location":
+
+[[!format sh """
+$> git annex version | head -n 1; git clone https://github.com/OpenNeuroDatasets/ds001544/ ; cd ds001544; git annex enableremote s3-PUBLIC; git annex get -J8 . 2>&1 | head -n 20; echo "2nd run"; git annex get -J8 .
+git-annex version: 6.20181011+git7-g373c2abc2-1~ndall+1
+Cloning into 'ds001544'...
+remote: Enumerating objects: 866, done.
+remote: Counting objects: 100% (866/866), done.
+remote: Compressing objects: 100% (483/483), done.
+remote: Total 866 (delta 144), reused 863 (delta 141), pack-reused 0
+Receiving objects: 100% (866/866), 75.07 KiB | 4.69 MiB/s, done.
+Resolving deltas: 100% (144/144), done.
+
+(merging origin/git-annex into git-annex...)
+(recording state in git...)
+
+  Remote origin not usable by git-annex; setting annex-ignore
+enableremote s3-PUBLIC ok
+(recording state in git...)
+get code/convert_sub01_ses01.R (from s3-PUBLIC...) 
+  unknown export location
+
+  Unable to access these remotes: s3-PUBLIC
+
+  Try making some of these repositories available:
+  	1c66b8f9-34c7-42d1-8e9f-d7bc1982311a -- root@460f24a504cc:/datalad/ds001544
+   	837e28c7-9e4a-4792-b1b1-aa69d3430a42 -- [s3-PUBLIC]
+   	a7294efc-f620-445d-8e9d-803b3ec748ef -- s3-PRIVATE
+
+  (Note that these git remotes have annex-ignore set: origin)
+failed
+get sub-01/ses-01/fmap/sub-01_ses-01_acq-cf0PA_run-03_epi.nii.gz (from s3-PUBLIC...) 
+  unknown export location
+
+  Unable to access these remotes: s3-PUBLIC
+
+  Try making some of these repositories available:
+  	1c66b8f9-34c7-42d1-8e9f-d7bc1982311a -- root@460f24a504cc:/datalad/ds001544
+   	837e28c7-9e4a-4792-b1b1-aa69d3430a42 -- [s3-PUBLIC]
+2nd run
+get code/convert_sub01_ses02.R (from s3-PUBLIC...) (checksum...) ok
+get code/convert_sub01_ses01.R (from s3-PUBLIC...) (checksum...) ok
+get sub-01/ses-01/fmap/sub-01_ses-01_acq-cf1PA_run-02_epi.nii.gz (from s3-PUBLIC...) (checksum...) ok
+get sub-01/ses-01/func/sub-01_ses-01_task-Stroop_acq-cf0AP_run-03_physio.tsv.gz (from s3-PUBLIC...) (checksum...) ok
+...
+"""]]
+
+
+[[!meta author=yoh]]

Added a comment: arm64 possible CIs etc
diff --git a/doc/todo/arm64_autobuilder/comment_1_381c675c33aa4bdedb823700f40dd3a6._comment b/doc/todo/arm64_autobuilder/comment_1_381c675c33aa4bdedb823700f40dd3a6._comment
new file mode 100644
index 000000000..cc599e31e
--- /dev/null
+++ b/doc/todo/arm64_autobuilder/comment_1_381c675c33aa4bdedb823700f40dd3a6._comment
@@ -0,0 +1,20 @@
+[[!comment format=mdwn
+ username="yarikoptic"
+ avatar="http://cdn.libravatar.org/avatar/f11e9c84cb18d26a1748c33b48c924b4"
+ subject="arm64 possible CIs etc"
+ date="2018-10-11T22:22:50Z"
+ content="""
+According to the great details @mmarmm on github provided in request to support [arm64 for neurodebian](https://github.com/neurodebian/dockerfiles/issues/10#issuecomment-406644418):
+
+Shippable supports free Arm64 CI/CD and I believe Codefresh does too (both 64-bit and 32-bit for both providers):
+
+https://blog.shippable.com/shippable-arm-packet-deliver-native-ci-cd-for-arm-architecture
+http://docs.shippable.com/platform/tutorial/workflow/run-ci-builds-on-arm/
+
+CodeFresh Arm Beta signup: https://goo.gl/forms/aDhlk56jZcblYokj1
+
+If you need raw infrastructure the WorksOnArm project will supply full servers if you want to deal with metal: https://github.com/worksonarm/cluster/
+
+
+I personally haven't looked into any of them yet
+"""]]

Added a comment
diff --git a/doc/news/version_6.20181011/comment_3_b81a8aaebf76a08390243e7943bb79a0._comment b/doc/news/version_6.20181011/comment_3_b81a8aaebf76a08390243e7943bb79a0._comment
new file mode 100644
index 000000000..cedab577d
--- /dev/null
+++ b/doc/news/version_6.20181011/comment_3_b81a8aaebf76a08390243e7943bb79a0._comment
@@ -0,0 +1,10 @@
+[[!comment format=mdwn
+ username="Ilya_Shlyakhter"
+ avatar="http://cdn.libravatar.org/avatar/1647044369aa7747829c38b9dcc84df0"
+ subject="comment 3"
+ date="2018-10-11T20:36:58Z"
+ content="""
+Also, can you check that the git-annex dependencies used in conda-forge are still correct?  They haven't been updated in a while.
+https://github.com/notestaff/git-annex-feedstock/blob/is-update-to-git-annex-6.20181011-new/recipe/meta.yaml#L18
+
+"""]]

Added a comment
diff --git a/doc/news/version_6.20181011/comment_2_269b29f168ae81e76c1cf6040021540b._comment b/doc/news/version_6.20181011/comment_2_269b29f168ae81e76c1cf6040021540b._comment
new file mode 100644
index 000000000..8ec76eb0d
--- /dev/null
+++ b/doc/news/version_6.20181011/comment_2_269b29f168ae81e76c1cf6040021540b._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="Ilya_Shlyakhter"
+ avatar="http://cdn.libravatar.org/avatar/1647044369aa7747829c38b9dcc84df0"
+ subject="comment 2"
+ date="2018-10-11T20:12:08Z"
+ content="""
+Btw, the Hackage page says \"All reported builds failed as of 2018-10-11\" -- not sure if that's a concern.
+"""]]

Added a comment
diff --git a/doc/news/version_6.20181011/comment_1_e35c359202bac8a1cb39355bfd737153._comment b/doc/news/version_6.20181011/comment_1_e35c359202bac8a1cb39355bfd737153._comment
new file mode 100644
index 000000000..6900e4c44
--- /dev/null
+++ b/doc/news/version_6.20181011/comment_1_e35c359202bac8a1cb39355bfd737153._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="Ilya_Shlyakhter"
+ avatar="http://cdn.libravatar.org/avatar/1647044369aa7747829c38b9dcc84df0"
+ subject="comment 1"
+ date="2018-10-11T18:59:31Z"
+ content="""
+Can you help me understand the SETURLPRESENT etc change?  Why shouldn't these calls update presence information?  What information do they update?
+"""]]

devblog
diff --git a/doc/devblog/day_545__termux_improvements.mdwn b/doc/devblog/day_545__termux_improvements.mdwn
new file mode 100644
index 000000000..dcdcc0ce5
--- /dev/null
+++ b/doc/devblog/day_545__termux_improvements.mdwn
@@ -0,0 +1,13 @@
+I've improved the termux installation, adding an installer script to make
+it easier, and fixing some issues that have been reported. And it supports
+arm64 and also should work on Intel android devices. 
+This feels very close to being able to remove the old deprecated Android
+apps.
+
+I'm temporarily running the arm64 builds on my phone, in a Debian chroot. But
+it overheats, so this is a stopgap and it won't autobuild daily, only manually
+at release time.
+
+Released git-annex 6.20181011.
+
+Today's work was sponsored by Jake Vosloo [on Patreon](http://patreon.com/joeyh/).

add news item for git-annex 6.20181011
diff --git a/doc/news/version_6.20180529.mdwn b/doc/news/version_6.20180529.mdwn
deleted file mode 100644
index c129a3eda..000000000
--- a/doc/news/version_6.20180529.mdwn
+++ /dev/null
@@ -1,27 +0,0 @@
-git-annex 6.20180529 released with [[!toggle text="these changes"]]
-[[!toggleable text="""
-   * Prevent haskell http-client from decompressing gzip files, so downloads
-     of such files works the same as it used to with wget and curl.
-   * Workaround for bug in an old version of cryptonite that broke https
-     downloads, by using curl for downloads when git-annex is built with it.
-   * view, vadd: Fix crash when a git submodule has a name starting with a dot.
-   * Don't allow entering a view with staged or unstaged changes.
-   * move: --force was accidentially enabling two unrelated behaviors
-     since 6.20180427. The older behavior, which has never been well
-     documented and seems almost entirely useless, has been removed.
-   * copy: --force no longer does anything.
-   * migrate: Fix bug in migration between eg SHA256 and SHA256E,
-     that caused the extension to be included in SHA256 keys,
-     and omitted from SHA256E keys.
-     (Bug introduced in version 6.20170214)
-   * migrate: Check for above bug when migrating from SHA256 to SHA256
-     (and same for SHA1 to SHA1 etc), and remove the extension that should
-     not be in the SHA256 key.
-   * fsck: Detect and warn when keys need an upgrade, either to fix up
-     from the above migrate bug, or to add missing size information
-     (a long ago transition), or because of a few other past key related
-     bugs.
-   * git-annex-shell: GIT\_ANNEX\_SHELL\_APPENDONLY makes it allow writes,
-     but not deletion of annexed content. Note that securing pushes to
-     the git repository is left up to the user.
-   * setpresentkey: Added --batch support."""]]
\ No newline at end of file
diff --git a/doc/news/version_6.20181011.mdwn b/doc/news/version_6.20181011.mdwn
new file mode 100644
index 000000000..2e5bdadcd
--- /dev/null
+++ b/doc/news/version_6.20181011.mdwn
@@ -0,0 +1,20 @@
+git-annex 6.20181011 released with [[!toggle text="these changes"]]
+[[!toggleable text="""
+   * sync: Warn when a remote's export is not updated to the current
+     tree because export tracking is not configured.
+   * Improve display when git config download from a http remote fails.
+   * Added annex.jobs setting, which is like using the -J option.
+   * Fix reversion in support of annex.web-options.
+   * rmurl: Fix a case where removing the last url left git-annex thinking
+     content was still present in the web special remote.
+   * SETURLPRESENT, SETURIPRESENT, SETURLMISSING, and SETURIMISSING
+     used to update the presence information of the external special remote
+     that called them; this was not documented behavior and is no longer done.
+   * export: Fix false positive in export conflict detection, that occurred
+     when the same tree was exported by multiple clones.
+   * Fix potential crash in exporttree database due to failure to honor
+     uniqueness constraint.
+   * Fix crash when exporttree is set to a bad value.
+   * Linux standalone: Avoid using bundled cp before envionment is fully set up.
+   * Added arm64 Linux standalone build.
+   * Improved termux installation process."""]]
\ No newline at end of file

update
diff --git a/doc/install/Linux_standalone.mdwn b/doc/install/Linux_standalone.mdwn
index 5af0a422b..356970bb1 100644
--- a/doc/install/Linux_standalone.mdwn
+++ b/doc/install/Linux_standalone.mdwn
@@ -42,6 +42,10 @@ The arm autobuilder runs daily (sun permitting), and is hosted by [[Joey]].
 
 * arm: [download tarball](https://downloads.kitenet.net/git-annex/autobuild/armel/git-annex-standalone-armel.tar.gz) ([build logs](https://downloads.kitenet.net/git-annex/autobuild/armel/))
 
+The arm64 autobuilder runs only intermittently. [[Better hosting needed.|todo/arm64_autobuilder]].
+
+* arm64: [download tarball](https://downloads.kitenet.net/git-annex/autobuild/armel/git-annex-standalone-arm64.tar.gz) ([build logs](https://downloads.kitenet.net/git-annex/autobuild/arm64/))
+
 ## technical details
 
 The way those tarballs are built is described in [joeyh's blog](http://joeyh.name/blog/entry/completely_linux_distribution-independent_packaging/).

move comment
diff --git a/doc/tips/install_on_Android_in_Termux/comment_22_39e2f2100a49f986760db389cf10240b._comment b/doc/tips/install_on_Android_in_Termux/old_comments/comment_22_39e2f2100a49f986760db389cf10240b._comment
similarity index 100%
rename from doc/tips/install_on_Android_in_Termux/comment_22_39e2f2100a49f986760db389cf10240b._comment
rename to doc/tips/install_on_Android_in_Termux/old_comments/comment_22_39e2f2100a49f986760db389cf10240b._comment

adding arm64 build, and improved termux installation process
* Added arm64 Linux standalone build. (No autobuilder yet.)
* Improved termux installation process.
Added git-annex-install.sh script to avoid user needing to type as much in
termux. The scope of this script is limited; runshell handles the rest.
Runshell runs termux-fix-shebang on the shell scripts. The problem is
the bundled bin/sh script, deleting that script also works, but then the
others probably use the system Android /bin/sh, which could be old or
broken or not posix or whatever. Using termux sh to run the scripts is
better.
This commit was sponsored by Eric Drechsel on Patreon.
diff --git a/Build/DistributionUpdate.hs b/Build/DistributionUpdate.hs
index 920cadb3e..6d3113c66 100644
--- a/Build/DistributionUpdate.hs
+++ b/Build/DistributionUpdate.hs
@@ -34,7 +34,7 @@ signingKey = "89C809CB"
 -- it in the repository.
 autobuilds :: [(URLString, FilePath)]
 autobuilds = 
-	(map linuxarch ["i386", "amd64", "armel", "i386-ancient"]) ++
+	(map linuxarch ["i386", "amd64", "armel", "arm64", "i386-ancient"]) ++
 	(map androidversion ["4.0", "4.3", "5.0"]) ++
 	[ (autobuild "x86_64-apple-yosemite/git-annex.dmg", "git-annex/OSX/current/10.10_Yosemite/git-annex.dmg")
 	, (autobuild "windows/git-annex-installer.exe", "git-annex/windows/current/git-annex-installer.exe")
diff --git a/CHANGELOG b/CHANGELOG
index 78a011ac3..a6f9b7806 100644
--- a/CHANGELOG
+++ b/CHANGELOG
@@ -15,8 +15,9 @@ git-annex (6.20180927) UNRELEASED; urgency=medium
   * Fix potential crash in exporttree database due to failure to honor
     uniqueness constraint.
   * Fix crash when exporttree is set to a bad value.
-  * Linux standalone: Avoid using bundled cp before envionment is fully set
-    up.
+  * Linux standalone: Avoid using bundled cp before envionment is fully set up.
+  * Added arm64 Linux standalone build.
+  * Improved termux installation process.
 
  -- Joey Hess <id@joeyh.name>  Thu, 27 Sep 2018 15:27:20 -0400
 
diff --git a/doc/builds.mdwn b/doc/builds.mdwn
index 765e87b09..6ff3db9ec 100644
--- a/doc/builds.mdwn
+++ b/doc/builds.mdwn
@@ -12,12 +12,12 @@
 <h2>Linux armel</h2>
 <iframe width=1024 height=20em scrolling=no frameborder=0 marginheight=0 marginwidth=0 src="https://downloads.kitenet.net/git-annex/autobuild/armel/build-version">
 </iframe>
+<h2>Linux arm64</h2>
+<iframe width=1024 height=20em scrolling=no frameborder=0 marginheight=0 marginwidth=0 src="https://downloads.kitenet.net/git-annex/autobuild/arm64/build-version">
+</iframe>
 <h2>Linux i386-ancient</h2>
 <iframe width=1024 height=20em scrolling=no frameborder=0 marginheight=0 marginwidth=0 src="https://downloads.kitenet.net/git-annex/autobuild/i386-ancient/build-version">
 </iframe>
-<h2>Linux armel-ancient</h2>
-<iframe width=1024 height=20em scrolling=no frameborder=0 marginheight=0 marginwidth=0 src="https://downloads.kitenet.net/git-annex/autobuild/armel-ancient/build-version">
-</iframe>
 <h2>Android</h2>
 <iframe width=1024 height=20em scrolling=no frameborder=0 marginheight=0 marginwidth=0 src="https://downloads.kitenet.net/git-annex/autobuild/android/4.3/build-version">
 </iframe>
@@ -40,12 +40,12 @@
 <h2>Linux armel</h2>
 <iframe width=1024 scrolling=no frameborder=0 marginheight=0 marginwidth=0 src="https://downloads.kitenet.net/git-annex/autobuild/armel/">
 </iframe>
+<h2>Linux arm64</h2>
+<iframe width=1024 scrolling=no frameborder=0 marginheight=0 marginwidth=0 src="https://downloads.kitenet.net/git-annex/autobuild/arm64/">
+</iframe>
 <h2>Linux i386-ancient</h2>
 <iframe width=1024 scrolling=no frameborder=0 marginheight=0 marginwidth=0 src="https://downloads.kitenet.net/git-annex/autobuild/i386-ancient/">
 </iframe>
-<h2>Linux armel-ancient</h2>
-<iframe width=1024 scrolling=no frameborder=0 marginheight=0 marginwidth=0 src="https://downloads.kitenet.net/git-annex/autobuild/armel-ancient/">
-</iframe>
 <h2>Android</h2>
 <iframe width=1024 scrolling=no frameborder=0 marginheight=0 marginwidth=0 src="https://downloads.kitenet.net/git-annex/autobuild/android/">
 </iframe>
diff --git a/doc/install/Android/git-annex-install.sh b/doc/install/Android/git-annex-install.sh
new file mode 100755
index 000000000..ad835fe13
--- /dev/null
+++ b/doc/install/Android/git-annex-install.sh
@@ -0,0 +1,48 @@
+#!/bin/sh
+# 
+# Installs git-annex in termux on android.
+# 
+# This is only a convenience script to avoid the user needing to type much
+# in termux. The standalone tarball automatically adapts itself to the termux
+# environment, so this script should stay as mininal as possible.
+
+set -e
+
+case $(uname -m) in
+	aarch64)
+		arch=arm64
+		;;
+	arm)
+		arch=armel
+		;;
+	x86_64)
+		arch=amd64
+		;;
+	x86_32)
+		arch=i386
+		;;
+	*) 
+		echo "unknown architecture $(uname -m), cannot install" >&2
+		exit 1
+		;;
+esac
+
+url=https://downloads.kitenet.net/git-annex/linux/current/git-annex-standalone-"$arch".tar.gz
+# uncomment to use latest autobuild
+#url=https://downloads.kitenet.net/git-annex/autobuild/"$arch"/git-annex-standalone-"$arch".tar.gz
+
+echo "Installing dependencies with termux pkg manager..."
+pkg install git wget tar coreutils proot
+
+echo "Downloading git-annex..."
+cd
+wget -O- "$url" | tar zx
+
+# This lets runshell finish the installation.
+git-annex.linux/git-annex version
+echo "git-annex is successfully installed."
+
+echo "Now running termux-setup-storage, to let git-annex access system storage."
+termux-setup-storage
+
+echo "Installation complete."
diff --git a/doc/install/Linux_standalone.mdwn b/doc/install/Linux_standalone.mdwn
index 8974268f9..5af0a422b 100644
--- a/doc/install/Linux_standalone.mdwn
+++ b/doc/install/Linux_standalone.mdwn
@@ -9,6 +9,7 @@ dependencies and is self-contained.
 * x86-64: [download tarball](https://downloads.kitenet.net/git-annex/linux/current/git-annex-standalone-amd64.tar.gz)
 * x86-32, for ancient kernels: [download tarball](https://downloads.kitenet.net/git-annex/linux/current/git-annex-standalone-i386-ancient.tar.gz)
 * arm: [download tarball](https://downloads.kitenet.net/git-annex/linux/current/git-annex-standalone-armel.tar.gz)
+* arm64: [download tarball](https://downloads.kitenet.net/git-annex/linux/current/git-annex-standalone-arm64.tar.gz)
 
 To use, just unpack the tarball, `cd git-annex.linux` and run `./runshell`
 -- this sets up an environment where you can use `git annex`, as well
diff --git a/doc/tips/install_on_Android_in_Termux.mdwn b/doc/tips/install_on_Android_in_Termux.mdwn
index 2dc45d211..d92dc7351 100644
--- a/doc/tips/install_on_Android_in_Termux.mdwn
+++ b/doc/tips/install_on_Android_in_Termux.mdwn
@@ -4,13 +4,9 @@ Linux software in a terminal.
 git-annex is not currently part of the Termux distribution, but it's easy
 to install it. Paste these commands into Termux:
 
-	pkg install git wget tar coreutils proot
-	termux-setup-storage
-	cd
-	wget https://downloads.kitenet.net/git-annex/linux/current/git-annex-standalone-armel.tar.gz
-	tar zxf git-annex-standalone-armel.tar.gz
-	rm git-annex-standalone-armel.tar.gz
-	git-annex.linux/runshell
+	pkg install wget
+	wget https://git-annex.branchable.com/install/Android/git-annex-install.sh
+	sh git-annex-install.sh
 
 Now you can set up a git-annex repository or two, to manage your
 Android files. To avoid typing any more, you can start up the
@@ -34,7 +30,7 @@ well in this Termux environment.
 ## Starting on boot
 
 If you install the Termux:Boot app, git-annex will also integrate with it.
-Repositories you create with the webapp (or list in
+Repositories you create with the webapp (or listed in
 ~/.config/git-annex/autostart) will have the assistant started in them on
 boot, so you don't need to start it manually.
 
@@ -46,3 +42,8 @@ boot, so you don't need to start it manually.
   limitations of Android's /sdcard. You can get around this using v6
   unlocked repositories, or by putting the git-annex repository on a better
   filesystem on the Android device, such as your termux home directory.
+
+## Upgrading
+
+To upgrade to a new git-annex release, just run
+`git-annex-install.sh` again.
diff --git a/doc/tips/install_on_Android_in_Termux/comment_1_dc277facdcfba4e175831467b0e450d5._comment b/doc/tips/install_on_Android_in_Termux/comment_1_dc277facdcfba4e175831467b0e450d5._comment
new file mode 100644
index 000000000..28ecb70df
--- /dev/null
+++ b/doc/tips/install_on_Android_in_Termux/comment_1_dc277facdcfba4e175831467b0e450d5._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="joey"
+ subject="""comment 1"""
+ date="2018-10-11T17:26:38Z"
+ content="""
+Bunch of old comments about problems with this that have been fixed were
+moved to [[old_comments]].
+"""]]
diff --git a/doc/tips/install_on_Android_in_Termux/old_comments.mdwn b/doc/tips/install_on_Android_in_Termux/old_comments.mdwn
new file mode 100644
index 000000000..78102c78a
--- /dev/null
+++ b/doc/tips/install_on_Android_in_Termux/old_comments.mdwn
@@ -0,0 +1 @@
+Some old comments, all obsoleted now. --[[Joey]]
diff --git a/doc/tips/install_on_Android_in_Termux/comment_10_8c24553afc5352c8a4c9cd0555423325._comment b/doc/tips/install_on_Android_in_Termux/old_comments/comment_10_8c24553afc5352c8a4c9cd0555423325._comment
similarity index 100%
rename from doc/tips/install_on_Android_in_Termux/comment_10_8c24553afc5352c8a4c9cd0555423325._comment
rename to doc/tips/install_on_Android_in_Termux/old_comments/comment_10_8c24553afc5352c8a4c9cd0555423325._comment
diff --git a/doc/tips/install_on_Android_in_Termux/comment_11_8f5f8f47305b45dca53222ac0e3bde29._comment b/doc/tips/install_on_Android_in_Termux/old_comments/comment_11_8f5f8f47305b45dca53222ac0e3bde29._comment
similarity index 100%
rename from doc/tips/install_on_Android_in_Termux/comment_11_8f5f8f47305b45dca53222ac0e3bde29._comment
rename to doc/tips/install_on_Android_in_Termux/old_comments/comment_11_8f5f8f47305b45dca53222ac0e3bde29._comment
diff --git a/doc/tips/install_on_Android_in_Termux/comment_12_a7bbf9e61e2e993eca9a9222de899920._comment b/doc/tips/install_on_Android_in_Termux/old_comments/comment_12_a7bbf9e61e2e993eca9a9222de899920._comment

(Diff truncated)
Added a comment: Works now!!
diff --git a/doc/tips/install_on_Android_in_Termux/comment_22_39e2f2100a49f986760db389cf10240b._comment b/doc/tips/install_on_Android_in_Termux/comment_22_39e2f2100a49f986760db389cf10240b._comment
new file mode 100644
index 000000000..accc0561c
--- /dev/null
+++ b/doc/tips/install_on_Android_in_Termux/comment_22_39e2f2100a49f986760db389cf10240b._comment
@@ -0,0 +1,9 @@
+[[!comment format=mdwn
+ username="branchable@bafd175a4b99afd6ed72501042e364ebd3e0c45e"
+ nickname="branchable"
+ avatar="http://cdn.libravatar.org/avatar/ae41dba34ee6000056f00793c695be75"
+ subject="Works now!!"
+ date="2018-10-11T16:09:00Z"
+ content="""
+Thanks a lot @joey, after running `termux-fix-shebang git-annex.linux/bin/*` this new build works!
+"""]]

diff --git a/doc/forum/Unlocking_files_gives_symlink_content.mdwn b/doc/forum/Unlocking_files_gives_symlink_content.mdwn
index a06df8707..161d0ef5c 100644
--- a/doc/forum/Unlocking_files_gives_symlink_content.mdwn
+++ b/doc/forum/Unlocking_files_gives_symlink_content.mdwn
@@ -1,4 +1,4 @@
-I am just beginning to use git-annex so it is possible that the following issue was caused by my own mishap. It cropped after commiting a number of files that had been moved between subfolders, and added with `git add -A` etc.
+I am just beginning to use git-annex so it is possible that the following issue was caused by my own mistake. It cropped after commiting a number of files that had been moved between subfolders, and added with `git add -A` etc.
 
 When files are locked, I am able to view their contents. However, when I unlock certain files, their contents appear to be replaced by the contents of the symlink. Locking them again allows me to view their contents. For instance, with one unlocked file, say `test.md`, I get
 

Added a comment
diff --git a/doc/todo/Natively_support_s3__58____47____47___urls___40__for_addurl__44___get__44___etc__41__/comment_13_20184de38c2adeed7e20fa323d9a3ba4._comment b/doc/todo/Natively_support_s3__58____47____47___urls___40__for_addurl__44___get__44___etc__41__/comment_13_20184de38c2adeed7e20fa323d9a3ba4._comment
new file mode 100644
index 000000000..19f9bc7d3
--- /dev/null
+++ b/doc/todo/Natively_support_s3__58____47____47___urls___40__for_addurl__44___get__44___etc__41__/comment_13_20184de38c2adeed7e20fa323d9a3ba4._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="Ilya_Shlyakhter"
+ avatar="http://cdn.libravatar.org/avatar/1647044369aa7747829c38b9dcc84df0"
+ subject="comment 13"
+ date="2018-10-11T12:03:12Z"
+ content="""
+So, it was some odd misconfiguration — I initremote’d a new external special remote of the same externaltype, set the old one to annex-ignore, and things seem to work.
+"""]]

diff --git a/doc/forum/Unlocking_files_gives_symlink_content.mdwn b/doc/forum/Unlocking_files_gives_symlink_content.mdwn
index 7d8404e1c..a06df8707 100644
--- a/doc/forum/Unlocking_files_gives_symlink_content.mdwn
+++ b/doc/forum/Unlocking_files_gives_symlink_content.mdwn
@@ -1,4 +1,4 @@
-I am just beginning to use git-annex so it is possible that the following issue was caused by my own mishap. It cropped after commiting a number of files that had been moved between folders.
+I am just beginning to use git-annex so it is possible that the following issue was caused by my own mishap. It cropped after commiting a number of files that had been moved between subfolders, and added with `git add -A` etc.
 
 When files are locked, I am able to view their contents. However, when I unlock certain files, their contents appear to be replaced by the contents of the symlink. Locking them again allows me to view their contents. For instance, with one unlocked file, say `test.md`, I get
 

Added a comment
diff --git a/doc/forum/Copy_modified_content_to_a_repo_that_only_wants_content_already_present/comment_2_0b13914351aeb57fd7684ff2041618ee._comment b/doc/forum/Copy_modified_content_to_a_repo_that_only_wants_content_already_present/comment_2_0b13914351aeb57fd7684ff2041618ee._comment
new file mode 100644
index 000000000..b2f0608a6
--- /dev/null
+++ b/doc/forum/Copy_modified_content_to_a_repo_that_only_wants_content_already_present/comment_2_0b13914351aeb57fd7684ff2041618ee._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="ericm"
+ avatar="http://cdn.libravatar.org/avatar/67ca64c5a99fb142fc2e3916333881ca"
+ subject="comment 2"
+ date="2018-10-10T23:20:17Z"
+ content="""
+Yeah I realized that what I want to achieve is not currently possible. So I just modified a bit the standard client preferred content, removing the archive folder part,
+"""]]

update
diff --git a/doc/devblog/day_524__new_phone.mdwn b/doc/devblog/day_524__new_phone.mdwn
new file mode 100644
index 000000000..3bacd9f03
--- /dev/null
+++ b/doc/devblog/day_524__new_phone.mdwn
@@ -0,0 +1,17 @@
+Been making some improvements to `git-annex export` over the past couple
+days, but took time off this afternoon to set up a new phone, and try
+[git-annex in termux](https://git-annex.branchable.com/tips/install_on_Android_in_Termux/)
+on it. Luckily, I was able to reproduce the signal 11
+on arm64 problem that several users have reported earlier, and also found a fix,
+which is simply to build git-annex for arm64.
+
+So I want to set up a [[todo/arm64_autobuilder]], and if someone has an
+arm64 server that could host it, that would be great. Otherwise, I could
+use Scaleway, but I'd rather avoid that ongoing expense.
+
+Also fixed a recent reversion in the linux standalone 
+runshell that broke git-annex in termux, and probably on some other
+systems.
+
+Today's work was sponsored by Trenton Cronholm
+[on Patreon](https://patreon.com/joeyh)
diff --git a/doc/tips/install_on_Android_in_Termux/comment_21_3d1c6a1dc4ff8f04dffa4a02ad56fef2._comment b/doc/tips/install_on_Android_in_Termux/comment_21_3d1c6a1dc4ff8f04dffa4a02ad56fef2._comment
new file mode 100644
index 000000000..7a6d537fe
--- /dev/null
+++ b/doc/tips/install_on_Android_in_Termux/comment_21_3d1c6a1dc4ff8f04dffa4a02ad56fef2._comment
@@ -0,0 +1,18 @@
+[[!comment format=mdwn
+ username="joey"
+ subject="""comment 21"""
+ date="2018-10-10T20:14:17Z"
+ content="""
+Well, I see the signal 11 too, on my arm64 phone running LineageOS Android 8.1. 
+Some others had earlier reported it worked on arm64, but perhaps newer
+versions of Android don't or whatever.
+
+I made a test arm64 build, and it does work. Get it here:
+<https://tmp.joeyh.name/git-annex-arm64-test-build/>
+
+(I also had to run termux-fix-shebang as described above.) 
+
+I do not yet have an arm64 autobuilder running, todo for that is
+[[todo/arm64_autobuilder]] -- if anyone has an arm64 machine that could run
+the autobuilder, that would help!
+"""]]
diff --git a/doc/todo/arm64_autobuilder.mdwn b/doc/todo/arm64_autobuilder.mdwn
new file mode 100644
index 000000000..8f6d7fc3d
--- /dev/null
+++ b/doc/todo/arm64_autobuilder.mdwn
@@ -0,0 +1,10 @@
+Add an arm64 autobuilder (linux).
+
+This is needed to run in termux on some android devices.
+And of course there are arm64 servers, although the armel build probably
+also works on them.
+
+Status: Builds fine on arm64, but needs an autobuilder. Building under
+emulation could be done, or a scaleway arm64 server, which would be a
+$5/month expense. Or, perhaps someone has an arm64 that could host the
+autobuilder? --[[Joey]]

diff --git a/doc/forum/Unlocking_files_gives_symlink_content.mdwn b/doc/forum/Unlocking_files_gives_symlink_content.mdwn
index 1c0fc3285..7d8404e1c 100644
--- a/doc/forum/Unlocking_files_gives_symlink_content.mdwn
+++ b/doc/forum/Unlocking_files_gives_symlink_content.mdwn
@@ -1,4 +1,4 @@
-I am just beginning to use git-annex so it is possible that the following issue was caused by my own mishap. It cropped after commiting a number of file renames.
+I am just beginning to use git-annex so it is possible that the following issue was caused by my own mishap. It cropped after commiting a number of files that had been moved between folders.
 
 When files are locked, I am able to view their contents. However, when I unlock certain files, their contents appear to be replaced by the contents of the symlink. Locking them again allows me to view their contents. For instance, with one unlocked file, say `test.md`, I get
 

diff --git a/doc/forum/Unlocking_files_gives_symlink_content.mdwn b/doc/forum/Unlocking_files_gives_symlink_content.mdwn
index 5a7079f99..1c0fc3285 100644
--- a/doc/forum/Unlocking_files_gives_symlink_content.mdwn
+++ b/doc/forum/Unlocking_files_gives_symlink_content.mdwn
@@ -7,7 +7,7 @@ When files are locked, I am able to view their contents. However, when I unlock
 
 Some files still behave as expected.
 
-My git-annex repo is in my Linux home folder on an ext4 partition so handling symlinks should not be an issue. My repo uses git-annex version 6.
+My git-annex repo is in my Linux home folder on an ext4 partition. My repo uses git-annex version 6.
 
 I did have a look at [this discussion](https://git-annex.branchable.com/forum/git_annex_file_content_replaced_with_symlink_content/) but none of the solutions there seemed to do the trick.